程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在目标中搜索和替换 CFLAGS大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在目标中搜索和替换 CFLAGS?

开发过程中遇到在目标中搜索和替换 CFLAGS的问题如何解决?下面主要结合日常开发的经验,给出你关于在目标中搜索和替换 CFLAGS的解决方法建议,希望对你解决在目标中搜索和替换 CFLAGS有所启发或帮助;

我需要将 -Werror 添加到已存在的(已导出?)CFLAGS 以进行构建。现在我只是想提取 CFLAGS 持有的数据。我是 Make 和 Makefiles 的新手,但必须添加一些预先存在的构建文件。

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

@H_419_6@ .PHONY: add_errors add_errors: @flags=$(CFLAGS);\ echo $$flags;\

但问题是,CFLAGS 是一个非常大的字符串,它设置了许多选项。 执行makefile时出现以下错误

@H_419_6@/bin/sh: 1: -marm: not found make[2]: *** [add_errors] Error 127

看起来像是将第一个空格作为字符串然后丢弃其余部分。

在CFLAGS里面,一段文字是

@H_419_6@-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命令foo=bar biz baz的意思是,将环境变量foo设置为值bar,然后运行命令biz与论据baz

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

.PHONY: add_errors
add_errors:
        @flags='$(CFLAGS)';\
        echo $$flags;\

将导致 make 运行:

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

大佬总结

以上是大佬教程为你收集整理的在目标中搜索和替换 CFLAGS全部内容,希望文章能够帮你解决在目标中搜索和替换 CFLAGS所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: