我想在不修改makefile本身的情况下将这个字符串附加到CFLAGS中:
-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')在运行make之前简单地附加到CFLAGS变量是不起作用的,因为此时不能对它进行评估。
有没有一种不修改makefile的方法?
发布于 2015-10-24 03:54:47
选项1:
对于这个选项,您必须能够修改Makefile一次。更改Makefile中修改或设置CFLAGS为override CFLAGS+=<current flags already being set in CFLAGS>的行。因此,如果当前生成文件中有CFLAGS=-std=c99,则将其更改为override CFLAGS+=-std=c99
然后,假设您想要添加-g进行编译,只需调用make,如下所示:
make CFLAGS=-g这将把-g放在-std=c99的前面。
有关更多信息,请参见覆盖指令。
备选方案2:
--在运行make.时可以使用传递的-e选项
-e给出从环境中获取的变量优先于makefiles中的变量。
例如,以下面的Makefile为例:
CFLAGS=-std=c++11
echoCFLAGS:
@echo $(CFLAGS)如果您想用其他东西(-std=c99)覆盖CFLAGS,那么只需:
bash -c "export CFLAGS=-std=c++99"
make -e echoCFLAGS这输出"-std=c99“
选项2中的问题
1) --这将不允许在需要的意义上追加-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/'),但您可以手动将-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')附加到Makefile中CFLAGS的原始值以获得所需的内容。
2) -e选项“不是推荐的实践”,如GNU手册中所述。这是因为“这会导致不同的用户从同一个makefile中获得不同的结果”(GNU make手册)。
https://stackoverflow.com/questions/33301800
复制相似问题