web-dev-qa-db-ja.com

makefileでCマクロを定義することは可能ですか?

プログラムのどの部分をコンパイルするかを制御できるように、#define VARに相当するもの(Cプログラム内)をmakefileに入れることはできますか?

25
Richard

cclinuxマンページに従ってください

-D name=definition
           The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In
           particular, the definition will be truncated by embedded newline characters.
21
Zimbabao

Makefileを編集して表示

CFLAGS = -D VAR1 -D VAR2= *何か*

Makefileでデフォルトのルールを使用している場合、これは自動的に機能します。そうしないで、Cコンパイラを明示的に呼び出している場合は、次のように記述してください。

$(CC)$(CFLAGS)-c -o $ @ $ <

Makefileではなく_CFLAGS=..._ aboveをコマンドラインで使用できる場合(man(1)のマニュアルページを参照)、さらに可愛くなります。これにより、最後にコンパイルパラメータを簡単に再構成できますが、パラメータは保持されません。

ベストプラクティスには、CPPFLAGSの代わりにCFLAGSを使用すること、および_+=_の代わりに_=_を使用することが含まれます。ただし、これらの機能のサポートは上記ほど一般的ではなく、makeシステムに依存します。

12
AntoineL

はい。

ほとんどのコンパイラは、#defineを指定するためのコマンドラインオプションをサポートしています。 Visual C++の場合、これは / Dオプション です。

7
Michael