我想在不修改makefile本身的情况下将此字符串附加到CFLAGS:
-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')
在运行make之前简单地附加CFLAGS变量并不起作用,因为此时无法对其进行评估。
如果没有修改makefile,有没有办法呢?
答案 0 :(得分:0)
选项1:
对于此选项,您必须能够修改一次Makefile。更改Makefile中修改或将CFLAGS
设置为override CFLAGS+=<current flags already being set in CFLAGS>
的行。因此,如果您的Makefile中目前有CFLAGS=-std=c99
,请将其更改为override CFLAGS+=-std=c99
然后,假设你想添加-g
进行编译,只需调用make就像这样:
make CFLAGS=-g
这会将-g
添加到-std = c99。
有关详细信息,请参阅override directive。
选项2:
可以使用运行make时传递的-e选项。
-e给出了环境优先于变量来自makefile的变量。
例如,请使用以下Makefile:
CFLAGS=-std=c++11
echoCFLAGS:
@echo $(CFLAGS)
如果你想用其他东西覆盖CFLAGS(-std = c99),那么只需:
bash -c "export CFLAGS=-std=c++99"
make -e echoCFLAGS
输出“-std = c99”
选项2的问题
1)这不允许您按照您想要的意义追加,但您可以手动将-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')
附加到CFLAGS
的原始值中Makefile可以得到你想要的东西。
2) -g选项“不建议练习”,如GNU制作手册中所述。这是因为“这会导致不同的用户从同一个makefile中获得不同的结果”(GNU make Manual)。