我如何根据编译器指令 -D 自动 select 一个 include.h 文件?

How do I automatically select an include.h file based on compiler directive -D?

我想在我的程序中有一个通用的 include.h 头文件,它将列出使用 -D ITEM=ITEM1 编译器标志选择时要使用的所有可能的包含文件。 例如,如果我想为 ITEM1 构建此库,那么为 item2 构建 -D ITEM=ITEM1,它将是 -D ITEM=ITEM2.

header.h 文件:

#ifdef ITEM1
#include item1.h
#endif
#ifdef ITEM2
#include item2.h
#endif

头文件 item1.h 和 item2.h 将是来自工作目录之外的另一个目录的 符号 link

当我执行此方案时,我在每个 item1.h 或 item2.h

中的定义中遇到范围错误

您使用的 -D 不正确。当你这样做时

-D ITEM=ITEM1

您定义 ITEM 符号并赋予它值 ITEM1。这不是您想要的,因为它留下 ITEM1ITEM2 未定义,所以这两个文件都不包含。你需要的是

-D ITEM1
//or
-D ITEM2

定义这些符号中的任何一个。

您可以使用 -D ITEM1-D ITEM2 来使您发布的代码生效。如果您想基于 -D ITEM=... 的逻辑,则需要使用 -D ITEM=1-D ITEM=2 并将代码更改为:

#ifdef ITEM

#if ITEM == 1
#include item1.h
#elif ITEM == 2
#include item2.h
#else
// Unknown value of ITEM. Figure out what do for this case.
#endif

#else
// ITEM is not defined. Figure out what do for this case.
#endif