我有一个makefile
其中我试图设置一些已存在于我写的bash脚本中的变量:set-vars.sh
(它只包含变量名称和值)。从bash脚本读取makefile变量
我在其他bash
脚本中使用这些变量。我需要也可以在我的makefile
中使用它们。
经过大量研究并试图找出makefile
中bash
脚本中设置变量的最佳方法后,我找到了一种可行的方法;这是如下:
set-vars.sh
:
# set vars
foo=FOO1
bar=BAR1
baz=BAZ1
# if a command line arg is given (e.g. foo)
# echo value command line arg (e.g. echo $foo)
if ! [ -z ${1+x} ]; then echo ${!1}; fi
这里神奇的是最后一行,其echo
ES在命令行参数提供了其名称的变量的值,如果有一个命令行参数。我在makefile
中调用此脚本并提供变量名称,并使用echo
ed值设置makefile
变量。
Makefile
:
.PHONY: target1 target2 target3
export foo = $(shell sh set-vars.sh foo)
target1:
@echo $(foo)
# ... other targets which reference $(foo) ...
这工作,但它可能是做这件事的哈克方式。我想知道是否有更简单,更优雅的方式来做我想做的事情。
我在StackOverflow上遇到过几个类似的问题和答案,但没有找到任何适用于我的示例的东西。如果我已经错过了一个答案,请告诉我。
非常感谢!
你不能在调用'make'的shell中设置变量,或者将它们放在'make'命令行上? – Barmar
其他脚本需要'如果! [-z ...'line? – Beta
@Barmar,我不能把它们放在make命令行上,因为这个makefile会被其他可能熟悉或者不熟悉这个makefile内部工作的人使用。我想保持makefile的调用尽可能简单......但是,通过在调用'make'的shell中设置变量,你的意思是什么?对不起,我不太精通shell脚本。 – tamjd1