2016-10-03 2 views
8

これは私のプロジェクト構造である:の#define

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

私はcppのファイルのいずれかでの#ifdefを持っています。 例:

#ifdef SOMEVALUE 
    Code 
#endif 

私はのJamfile内の#defineでのcppファイルをコンパイルする必要があります。以来、私は2つのタイプの実行可能ファイル(#defineと1つではないもの)を持っています。私はこれをJamfile自身で行い、cppコードでは実行する必要はありません。

私は(の#ifdef #endifのブロック内の定義を見つけることができない)動作しません。これは、次のことを試してみました:

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

答えて

5

は、プリプロセッサの定義を追加してGCCを経由して

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

と、コンパイル中に行われた 方法は、あなたがあなたの例で与えられた見てきたような特徴を「定義」を使用します。ただし、この機能はターゲット定義のrequirementとして指定する必要があります。 requirementsは、ユースケースの4番目ではなく、ターゲット定義の3番目の引数として指定されています。したがって、代わりに:

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

以前のプロジェクトは、我々はデバッグモードで異なるコンパイルを持っているために使用する - 離れていますデバッグシンボルを追加することは、実行時に多くの有用な値を出力するために使用されます。それは-DDEBUG