多字定义通过结构不良的makefile系统

时间:2015-10-02 11:38:35

标签: c makefile c-preprocessor

我对遗留项目做了一些小改动,我需要将一个包含多个单词的定义传递给命令行,如下所示:

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

并进行编译。任何建议如何以另一种方式做到这一点同样受欢迎。

1 个答案:

答案 0 :(得分:4)

CUSTOM_DEFINES=Func="int/**/Func"

CUSTOM_DEFINES=Func="int(Func)"

可能值得一试。你几乎从不真正需要C中的空格。

相关问题