2017-09-14 6 views
1

私は簡単なprintf Cコードを書き、簡単なメイクファイルを作成しました。 私は変数の値はこのように、それらの値なしでgccの実行に続いて、ccの実行に入り、CFLAGS、CPPFLAGSとLDFLAGSでmakeを実行:私は構築されたプログラムを実行するとCFLAGS CPPFLAGSとLDFLAGSはccを呼び出しますが、gccに値を渡しません

$ CFLAGS="-I." CPPFLAGS="-D TESTEDEFINE" CXXFLAGS="TESTECXXFLAGS" LDFLAGS="-L." LFLAGS="TESTELFLAGS" make 
cc -I. -D TESTEDEFINE -L. teste.c -o teste 
gcc -o teste teste.c 

、 defineは、定義されていない#elseのprintfを与えるので定義されていません。

teste.c

#include <stdio.h> 

int main() 
{ 
#if defined(TESTEDEFINE) 
    printf("TESTEDEFINE!!!"); 
#else 
    printf("!!!"); 
#endif 
    return 0; 
} 

Makefileの

all: teste 
    gcc -o teste teste.c 
+1

'gcc -o teste teste.c'を実行するように指示すると、それが実行されます。その行を削除した場合、マクロが機能することがあります。代わりに '$ {CC} -o $ @ $ {CPPFLAGS} $ {CFLAGS} $ {LDFLAGS} $ {LDLIBS}'をレシピの行として使用してください。 –

+0

フラグは、Makefileで明示的に使用する場合、またはルールのコマンドを省略した場合にのみ機能します。 –

+0

はあなたのメークファイル全体を見るのに役立つかもしれません。もしそうなら、あなたは "単純なmakefile"について冗談を言っていませんでした。 – yano

答えて

3

変数は、一貫性、読みやすさ、使いやすさのためのものです。あなたのコンパイルもメイクファイルもそれを参照しません。コンパイラはこれらの変数を自動的に参照しません。

代わりにこれを試してみてください:

$ export CFLAGS="-I." CPPFLAGS="-D TESTEDEFINE" CXXFLAGS="TESTECXXFLAGS" LDFLAGS="-L." LFLAGS="TESTELFLAGS" 
$ gcc $CFLAGS $CPPFLAGS $CXXFLAGS $LDFLAGS $LFLAGS -o teste teste.c 

はまた、あなたのメイクファイルでそれらを定義し、コンパイラのラインでそれらを参照する必要があります。

+0

目的はコマンドラインから直接GCCではなく 'make'を使うことです。 –

関連する問題