2016-10-03 63 views
8

這是我的項目結構:的#define在加速的Jamfiles

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

我有一個#ifdef來在cpp文件之一。 例子:

#ifdef SOMEVALUE 
    Code 
#endif 

我需要編譯的Jamfile中的#define的cpp文件。因爲我有兩種類型的可執行文件(一種使用#define,一種不使用),所以我需要在Jamfile中執行此操作,而不是cpp代碼。

我曾嘗試以下,這是不行的(無法找到的#ifdef #ENDIF塊中定義):

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

回答

5

添加預處理器定義使用「定義」功能,你見過給你的榜樣。但該功能需要指定爲目標定義的requirementrequirements被指定爲目標定義的第三個參數,而不是用例中的第四個參數。因此,而不是:

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

您需要從使用需求移動「<定義>」的目標要求:

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

你可以找到所有參數的目標定義爲here

0

在我的早期項目,我們用它來對調試模式不同的編譯 - 其中除了從添加調試符號使用在運行時間打印許多有用的值。 事情是這樣做

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

,並同時通過GCC編譯與-DDEBUG