我对遗留项目做了一些小改动,我需要将一个包含多个单词的定义传递给命令行,如下所示:
CFLAGS += -DXXX="A B"
不幸的是,由于这个项目的结构方式,我的makefile片段无法访问CFLAGS
变量或任何其他全局变量。我只有CUSTOM_DEFINES
暴露的内容,稍后会附加到CFLAGS
。
根据我的理解,makefile最终会做相当于
CFLAGS += $(addprefix -D,$(CUSTOM_DEFINES))
会生成此命令行选项:-DXXX="A -DB"
,相当于#define XXX A -DB
而不是#define XXX A B
。
我可以添加一些神奇的序列来CUSTOM_DEFINES
以获得正确的结果吗?
避免XY问题,这里有一些背景信息:
我试图强迫一个脆弱的旧系统吞下一个破碎的系统标题(我也无法改变)。一个地方的标题不定义返回类型:
/*implicit int */ SomeLegacyFunction(int a, int b) { return a + b; }
编译器不接受这个(我无法真正改变编译器参数)。由于SomeLegacyFunction
从未使用过,我想做的事情如下:
#define SomeLegacyFunction int SomeLegacyFunction
并进行编译。任何建议如何以另一种方式做到这一点同样受欢迎。
答案 0 :(得分:4)
CUSTOM_DEFINES=Func="int/**/Func"
或
CUSTOM_DEFINES=Func="int(Func)"
可能值得一试。你几乎从不真正需要C中的空格。