#define 在 Boost Jamfiles 中

#define in Boost Jamfiles

这是我的项目结构:

MainFolder
  - Jamroot.jam
  - AnotherFolder
      - libFolder
          - Jamfile.jam
          - cpp files

我在其中一个 cpp 文件中有一个 #ifdef。 示例:

#ifdef SOMEVALUE
  Code
#endif

我需要在Jamfile 中用#define 编译cpp 文件。因为,我有两种类型的可执行文件(一种带 #define,一种不带),我需要在 Jamfile 本身而不是 cpp 代码中执行此操作。

我试过以下方法,但没有用(无法在#ifdef #endif 块中找到定义):

lib libname : [ glob *.cpp ] : <link>static : <define>SOMEVALUE ;

在我之前的项目中,我们使用不同的调试模式编译 - 除了添加调试符号外,它还用于在 运行 时间内打印许多有用的值。 完成方式

#ifdef DEBUG
/* Piece of code here*/
#endif

并且在使用 -DDEBUG 通过 GCC 进行编译时

添加预处理器定义使用 "define" 功能,如您在示例中所见。但是该功能需要指定为 requirement of the target definition. The requirements 被指定为目标定义的第三个参数,而不是您的用例中的第四个参数。因此,而不是:

lib
  libname # main-target-name
  : [ glob *.cpp ] # sources
  : <link>static # requirements
  : <define>SOMEVALUE # default-build
  ;

您需要将“”从使用要求移动到目标要求:

lib
  libname # main-target-name
  : [ glob *.cpp ] # sources
  : <link>static <define>SOMEVALUE # requirements
  : # default-build
  : # usage-requirements
  ;

您可以找到目标定义的所有参数是什么 here