【问题标题】:How do I automatically select an include.h file based on compiler directive -D?如何根据编译器指令 -D 自动选择 include.h 文件?
【发布时间】:2020-03-15 06:55:43
【问题描述】:

我想在我的程序中有一个通用的 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 将是来自工作目录之外另一个目录的符号链接

当我执行此方案时,我在 item1.h 或 item2.h 中的每个定义中遇到范围错误

【问题讨论】:

    标签: c++ include header-files preprocessor compiler-flags


    【解决方案1】:

    您可以使用-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
    

    【讨论】:

    • 非常感谢...这就是我想要实现的。
    • @SydPao,不客气。很高兴我能提供帮助。快乐编程。
    【解决方案2】:

    您错误地使用了-D。当你这样做时

    -D ITEM=ITEM1
    

    您定义ITEM 符号并为其赋予值ITEM1。这不是您想要的,因为它使 ITEM1ITEM2 未定义,因此这两个文件都不包括在内。你需要的是

    -D ITEM1
    //or
    -D ITEM2
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 2020-09-06
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多