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