下面的代码片段应该采用 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。