Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 搜索并替换目标中的CFLAG_Makefile_Cflags - Fatal编程技术网

Makefile 搜索并替换目标中的CFLAG

Makefile 搜索并替换目标中的CFLAG,makefile,cflags,Makefile,Cflags,我需要将-Werror添加到已经存在的(导出的?)cflag中以进行构建。现在我只是想提取CFLAGS持有的数据。我对Make和makefile非常陌生,但必须添加一些预先存在的构建文件 假设我在这样的makefile中有一个目标 .PHONY: add_errors add_errors: @flags=$(CFLAGS);\ echo $$flags;\ 但问题是,CFLAGS是一个非常大的字符串,它设置了许多选项。 当执行makefile时,我得到

我需要将-Werror添加到已经存在的(导出的?)cflag中以进行构建。现在我只是想提取CFLAGS持有的数据。我对Make和makefile非常陌生,但必须添加一些预先存在的构建文件

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

   .PHONY: add_errors
   add_errors:
       @flags=$(CFLAGS);\
       echo $$flags;\
但问题是,CFLAGS是一个非常大的字符串,它设置了许多选项。 当执行makefile时,我得到以下错误

/bin/sh: 1: -marm: not found
make[2]: *** [add_errors] Error 127
看起来好像有东西把第一个空格作为字符串,然后丢弃它的其余部分

在CFLAGS中,显示了一段文本

-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

我能做什么?

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

我给你的第一个建议是永远不要在食谱上使用@前缀。或者至少在makefile已经100%正常工作之前不要使用它们。这样抑制make的输出就像蒙着眼睛调试一样

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

如果删除@并查看生成打印的内容,您将看到它正在运行以下命令:

flags=-march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s ...; echo $flags;
如果您将其剪切并粘贴到shell中,您将得到完全相同的错误

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

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

.PHONY: add_errors
add_errors:
        @flags='$(CFLAGS)';\
        echo $$flags;\
将导致make运行以下操作:

flags='-march=armv5te -marm -mthumb-interwork -mtune=arm926ej-s ...'; echo $flags;