这是我的项目结构:

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 ;

最佳答案

如示例所示,添加预处理器定义将使用“定义”功能。但是需要将该功能指定为目标定义的requirementrequirements被指定为目标定义的第三个参数,而不是用例中的第四个参数。因此,代替:

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

10-08 11:30