私の c/c++ ファイルには、複数の #define があります。例として:
#ifdef LIBVNCSERVER_HAVE_LIBZ
/* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
/* some more code */
コンパイル中にすべてのファイルに#define が含まれるように Makefile.in を変更する方法を教えてください。
ありがとうございました。
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
あなたはそれらを渡すことができますCPPFLAGS
、
CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
または新しい変数を作成する
CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
そしてそれをに渡しますCPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)
それらは最終的にに渡されますgcc/g++ -D...
$(CC) $(CPPFLAGS)
次の行をメイクファイルに追加します。
DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG ... ...さらに、makefileの行にある.... ... $(cc) ($(addprefix -D, $(DEFINES))) ..... ... ...
これは例としての役割を果たします。別の定義をDEFINES
変数に追加するだけで、次の行で参照されます。この行では、make が変数を自動的に展開し、 d$(cc) -D$(DEFINES)
のものをコンパイルします。#ifdef
小さな誤りを指摘してくれたR Samuel Klatchkoに感謝します...これは特に GNU の make のためのものです。
Makefile.in を変更しないでください。(Automake を使用し、Makefile.in をより単純な Makefile.am に変換することを検討してください)。これらの #defines の要点は、構成スクリプトがそれらを config.h で定義できるようにすることであり、ソース ファイルには <config.h> を #include する必要があります。パッケージを維持している場合は、configure.ac にテストを記述して、使用しているシステムに jpeg および zlib をサポートする libvncserver がインストールされているかどうかを判断する必要があります。Makefile.in を常に定義するように変更すると、それらの機能が利用可能なマシン上でのみコードがビルドされていると仮定することになります。その仮定を行う場合でも、それを確認するために configure.ac にチェックを追加し、依存関係が満たされない場合は configure スクリプトが失敗するようにする必要があります。