web-dev-qa-db-ja.com

Makeファイルで#defineを定義するにはどうすればよいですか?

私のc/c ++ファイルには、複数の#defineがあります。例として:

#ifdef LIBVNCSERVER_HAVE_LIBZ
  /* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
  /* some more code */

コンパイル中に[〜#〜] all [〜#〜]ファイルに#defineが含まれるように、Makefile.inを変更する方法を教えてください。

ありがとうございました。

12
n179911
_-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)
_
19
YOU

以下の行をmakefileに追加します。

 DEFINES = LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG 
 ... 
 ...さらにmakefileの.... 
 ... [と書かれている行。 ____。] $(cc)($(addprefix -D、$(DEFINES)))..... 
 ... 
 ... 

これは例として役立つため、DEFINES変数に別の定義を追加するだけです。これは、$(cc) -D$(DEFINES)に示すように、行で参照されます。ここで、makeは変数を自動的に展開し、それらをコンパイルします。 #ifdefd。

R Samuel Klatchko小さな間違いを指摘してくれてありがとう...これは特にGNUのメーカーのためのものですaddprefixを使用して適切に実行できます($(addprefix -D、$(DEFINES)))

3
t0mm13b

Makefile.inを変更しないでください。 (そして、Automakeを使用して、Makefile.inをはるかに単純なMakefile.amに変換することを検討してください)。これらの#definesの要点は、configureスクリプトにconfig.hでそれらを定義させることであり、ソースファイルには#include <config.h>が必要です。パッケージを保守している場合は、configure.acにテストを記述して、使用しているシステムにjpegおよびzlibをサポートするlibvncserverがインストールされているかどうかを確認する必要があります。 Makefile.inを変更して常にそれらを定義する場合、コードはそれらの機能が利用可能なマシン上でのみ構築されていると想定しています。その仮定をする場合でも、configure.acにチェックを追加して確認し、依存関係が満たされない場合はconfigureスクリプトを失敗させる必要があります。

0
William Pursell