将shell命令附加到CFLAGS

时间:2015-10-23 11:59:31

标签: gcc makefile

我想在不修改makefile本身的情况下将此字符串附加到CFLAGS:

-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')

在运行make之前简单地附加CFLAGS变量并不起作用,因为此时无法对其进行评估。

如果没有修改makefile,有没有办法呢?

1 个答案:

答案 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)。

有关详细信息,请参阅thisthis link