我如何根据编译器指令 -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
。这不是您想要的,因为它留下 ITEM1
和 ITEM2
未定义,所以这两个文件都不包含。你需要的是
-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
我想在我的程序中有一个通用的 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
。这不是您想要的,因为它留下 ITEM1
和 ITEM2
未定义,所以这两个文件都不包含。你需要的是
-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