首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将shell命令追加到CFLAGS

将shell命令追加到CFLAGS
EN

Stack Overflow用户
提问于 2015-10-23 11:59:30
回答 1查看 1.4K关注 0票数 0

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

代码语言:javascript
复制
-frandom-seed=$(shell md5sum $< | sed 's/\(.*\) .*/\1/')

在运行make之前简单地附加到CFLAGS变量是不起作用的,因为此时不能对它进行评估。

有没有一种不修改makefile的方法?

EN

回答 1

Stack Overflow用户

发布于 2015-10-24 03:54:47

选项1:

对于这个选项,您必须能够修改Makefile一次。更改Makefile中修改或设置CFLAGSoverride CFLAGS+=<current flags already being set in CFLAGS>的行。因此,如果当前生成文件中有CFLAGS=-std=c99,则将其更改为override CFLAGS+=-std=c99

然后,假设您想要添加-g进行编译,只需调用make,如下所示:

代码语言:javascript
复制
make CFLAGS=-g

这将把-g放在-std=c99的前面。

有关更多信息,请参见覆盖指令

备选方案2:

--在运行make.时可以使用传递的-e选项

-e给出从环境中获取的变量优先于makefiles中的变量。

例如,以下面的Makefile为例:

代码语言:javascript
复制
CFLAGS=-std=c++11
echoCFLAGS:
    @echo $(CFLAGS)

如果您想用其他东西(-std=c99)覆盖CFLAGS,那么只需:

代码语言:javascript
复制
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手册)。

有关更多信息,请参见此链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33301800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档