2017-08-07 8 views
0

私は&が定義されていないMACROでソースコードを2回コンパイルしようとしています。デフォルトのためのマクロが&を定義されていないので、私はので、私はこのONE_MACROfile.hでを使用していますマクロ定義がどのようにしてMakefileからヘッダファイルに渡されますか?

$(MAKE) -c $(present_dir)/new_dir -DONE_MACRO=1 

のように、Makefileのからの引数を通じて、このマクロを定義したいです。 この定義がどのように反映され、プリプロセッサを知るか。ここではcygmakeを使用しています。どのようにMACRO as argument to compilercygmakeツールで渡す。

ファイル.h: - このONE_MACROは、メイクファイルから定義され、どのように

#if ONE_MACRO 
    #define some_targets 
#else 
#define other_targets 
#endif 

、イム

Makefileを以下のように引数としてマクロを渡そうとし: -

MY_TARGET: 
    $(MAKE) -C $(present_dir)/target_dir -D ONE_MACRO=1 $(MAKECMDGOALS) 
+1

あなたの質問は不明です。 [This](http://www.cplusplus.com/doc/tutorial/preprocessor/)は、 'file.h'で'#ifdef'を使う方法を示しています。それはあなたの質問に答えますか? – Beta

+0

あなたが何を求めているかははっきりしていません。コンパイラは '-D MACRO_DEFINE = 1'引数(オプション文字 'D'と値 'MACRO_DEFINE = 1'の間にスペースを入れずに書かれています)を' #define MACRO_DEFINE 1'を読み込むコード行のように扱います。これは、実際のコードが処理される前に設定されます。それはまっすぐなので、おそらくあなたが求めているものではありませんが、あなたが求めているものは明確ではありません。 –

+0

私は**マクロを引数としてMakefileからコンパイラに渡したい**、このマクロは 'file.h'.soでコンパイル中に' file.h'をコンパイルする**マクロに基づいて2回コンパイルする定義済みおよび未定義**です。私は今、それがはっきりと思う。 – Kumar2080

答えて

1

のためにすべてのコンパイラには環境変数があり、コンパイラ/リンカに引数を渡します。 GCC以外のものを扱う際には、使用前に環境変数を見つける必要があります。

私の場合は賢明ですRVCT31_CCOPTはビルド時に引数をコンパイラに渡す変数です。

0

私はあなたが望むと思うようにする方法の例です:

define_test.c:

#include <stdio.h> 

#ifndef X 
#define X 1 
#endif 

int 
main() 
{ 
    printf("X = %d\n", X); 
} 

のMakefile:

X = 1 
CPPFLAGS += -DX=$(X) 

define_test: FORCE 
     $(CC) $(CPPFLAGS) define_test.c -o [email protected] 

FORCE: 

次にマクロXに異なる値渡しする:

make X=2 

は(これはマクロの値になりたいと仮定し整数。あなたは値が文字列になりたい場合は、適切に引用して少しトリッキー取得する必要があります)

あなたはまた、CPPFLAGSに直接定義を追加することができ、例えば:。

make CPPFLAGS+=-DX=2

+0

私はこのコンセプトを試みましたが、cygmakeは私に無効なオプションを与えています 'cygmake:無効なオプション - D'です。 – Kumar2080

+0

もちろん、 '-D'は無効です。これはプリコンパイラのオプションです。あなたは「コンセプトを試しました」と言っていますが、正確に**入力したのは何ですか?たとえば、 'make CPPFLAGS + = - DONE_MACRO = 1'と入力しましたか? – varro

+0

はい、私はCPPFLAGSに-Dでマクロを追加しました。 ここでコンパイラとその引数はcodeblocks設定ファイル.cbpによって与えられます。メインのMakefileは、このcbpファイルを実行してコードをコンパイルするサブフォルダのmakefileを呼び出します。 – Kumar2080

関連する問題