首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索并替换目标中的CFLAGS

搜索并替换目标中的CFLAGS
EN

Stack Overflow用户
提问于 2021-01-28 17:31:30
回答 1查看 264关注 0票数 0

我需要将-Werror添加到已经存在的(导出的?)建造的CFLAGS。现在,我只是尝试提取CFLAGS所持有的数据。我是超级新的制作和Makefiles,但必须添加一些预先存在的构建文件。

假设我在像这样的makefile中有一个目标

代码语言:javascript
复制
   .PHONY: add_errors
   add_errors:
       @flags=$(CFLAGS);\
       echo $$flags;\

但问题是,CFLAGS是一个非常大的字符串,有许多选项集。执行makefile时,我得到以下错误

代码语言:javascript
复制
/bin/sh: 1: -marm: not found
make[2]: *** [add_errors] Error 127

它看起来像是以第一个空格作为字符串,然后丢弃其余的字符串。

在CFLAGS内部,文本的一个片段是

代码语言:javascript
复制
-march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s --sysroot=/opt/dspg/v2.11-rc2/sysroots/cortexa9-neon-dspg-linux-gnueabi -Wno-psabi -ggdb -I/opt/dspg/v2.11-rc2/sysroots/cortexa9-neon-dspg-linux-gnueabi/usr/include/libxml2

我能做什么?

EN

回答 1

Stack Overflow用户

发布于 2021-01-28 17:53:15

您应该问一个与您真正想要做的事情有关的问题,包括代码的相关部分。您给出的这个示例对任何事情都没有用,所以我们给出的答案可能实际上不会对您有所帮助,但是:

我给您的第一个建议是不要在菜谱上使用@前缀。或者,在makefile已经100%正确工作之前,至少不要使用它们。压制make的输出就像蒙住眼睛时尝试调试一样。

这个问题与make一点关系都没有,真的:它只是shell引用规则。

如果您删除@并查看什么是make打印,您将看到它正在运行以下命令:

代码语言:javascript
复制
flags=-march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s ...; echo $flags;

如果你剪切并粘贴到你的外壳,你会得到完全相同的错误。

这是因为shell命令foo=bar biz baz意味着将环境变量foo设置为值bar,然后使用参数baz运行biz命令。

您需要添加引用,以便shell将所有参数放入flags变量中:

代码语言:javascript
复制
.PHONY: add_errors
add_errors:
        @flags='$(CFLAGS)';\
        echo $$flags;\

将导致make运行以下命令:

代码语言:javascript
复制
flags='-march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s ...'; echo $flags;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65942288

复制
相关文章

相似问题

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