私はcでプログラムを書いているので、ユーザーが望むかどうかに応じて翻訳単位をオプションでコンパイルしたいと思います。デフォルトでは、私は常にコンパイルする必要があるmain.cという2つのファイルを持っています。また、ファイルがありますが、「オプション.c」と呼びます。 option.cの一部の機能はmain.cのものよりはるかに高速ですが、エラーが発生しやすいです。
私のmain.cで次のコードを書くことができます:
#ifdef USE_OPTIONAL
some function call from optional.c
#else
some function call from main.c
#endif
私のメイクファイルでは、option.cを使用する必要がある場合にのみコンパイルしたいと思います。
gcc -c optional.c
gcc -c -DUSE_OPTIONAL main.c
gcc main.o optional.o
そうでなければ
gcc -c main.c
gcc main.o
これには「all:」という規則と「オプション:」という2つの規則がありますが、私は「make option」の代わりに「make」と入力することを好みます。これを達成する最も簡単な方法は何ですか?スクリプトとMakefile.inを設定する必要がありますか、それとも2番目のルールを使用する方が良いですか?たとえば、「make USE_OPTIONAL = 1」を実装してから、USE_OPTIONAL変数の入力を読み、何をすべきかを調べるようにすることは可能ですか?
答え1
少なくともGNU Makeを使用している場合は、MakefileのCプリプロセッサディレクティブと同様のアプローチを使用できます。
ifdef USE_OPTIONAL
main.o: CPPFLAGS += -DUSE_OPTIONAL
program: main.o optional.o
else
program: main.o
endif
これが完了すると、呼び出しUSE_OPTIONAL
で指定されたすべての値にmake
オプションの機能が含まれます。
より具体的なテストが必要な場合は、次のものを使用できます。
ifeq ($(USE_OPTIONAL), 1)
行の代わりにifdef
。その場合は専門的なものが必要ですmake USE_OPTIONAL=1
。