1

下面的代码片段应该采用 PROJECT 的值(在 Makefile 中定义)并创建一个包含文件名。例如,如果 PROJECT=classifier,那么它应该在最后为 PROJECTINCSTR 生成classifier_ir.h

我发现只要我不尝试在后缀中使用下划线,这段代码就可以工作。然而,下划线的使用不是可选的——我们的代码库在任何地方都使用它们。我可以解决这个问题,因为 PROJECT 的值数量有限,但我想知道如何使用下划线使以下代码段实际工作。能逃脱吗?

#define PROJECT classifier

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

#include PROJECTINCSTR

编辑:编译器应该尝试包含classifier_ir.h,而不是PROJECT_ir.h。

4

3 回答 3

7
#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define SMASH(x,y) x##y
#define MAKEINC(x) SMASH(x,_ir.h)
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)
于 2008-09-26T20:55:52.770 回答
1

这对我有用:

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC(x) MAKEINC(x)
#define PROJECTINCSTR MAKESTR(PROJECTINC(PROJECT))

#include PROJECTINCSTR
于 2008-09-26T21:02:35.640 回答
0

该准系统示例适用于 gcc (v4.1.2) 并尝试包含“PROJECT_ir.h”

于 2008-09-26T20:54:12.087 回答