繁体   English   中英

如何在命令行中传递存储在文本文件中的make标志?

[英]How to pass make flags stored in text files in command line?

我有一个名为OPTIONS.txt的文本文件,该文件存储Makefile的所有标志:

arg1=foo arg2="-foo -bar"

我想通过所有标志在这个文件中make 然而,

make `cat OPTIONS.txt`

使用make: invalid option -- 'a'失败。 似乎shell将其解释为:

make arg1=foo arg2="-foo -bar"
     ^argv[1] ^argv[2]   ^argv[3]

有什么办法可以将其解释为:

make arg1=foo arg2="-foo -bar"
     ^argv[1] ^--------argv[2]

如果要让shell在反引号扩展后解释引号,则需要使用eval,如下所示:

eval make `cat OPTIONS.txt`

但是请注意,这会评估所有内容,因此,如果您引用了引号之外的内容,则会遇到相同的问题:

eval make `cat OPTIONS.txt` arg4="one two"

将给出一个错误。 您必须将arg4双引号,如下所示:

eval make `cat OPTIONS.txt` arg4='"one two"'

通常,在脚本之外从命令行执行此类操作比较棘手。

预计到达时间

真正的问题是我们没有一套要求。 为什么要将它们放入文件中,以及要添加什么内容? 它们是仅makefile变量赋值,还是这里还有其他make选项,例如-k或类似的?

如果OP控件(可以更改)文件的格式并且文件包含仅由make使用的内容,并且OP不在乎变量是命令行分配还是常规分配,并且仅存在变量分配而没有其他选项,那么他们可以(a)将每个变量赋值放在自己的行上,(b)删除所有引号,并且(c)从makefile内部使用include OPTIONS.txt来“导入”它们。

由于您控制选项文件,因此每行存储一个选项:

arg1=foo
arg2="-foo -bar"

然后在外壳中,将文件读入数组,每行一个元素:

readarray -t opts < OPTIONS.txt

现在,您可以调用make并使整个选项保持不变:

make "${opts[@]}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM