5

私はmakefileを学習していて、ルールを再利用する方法を理解しようとしています。今私は次のものを持っています:

CPP = cl

CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

.SUFFIXES: .exe .cpp

Exercise35.exe:
    $(CPP) Exercise35.cpp $(CPPFLAGS)

debug:
    $(CPP) Exercise35.cpp $(CPPFLAGS) /D "_DEBUG"

ルールが基本的に追加のコマンドラインパラメータを使用してルールをdebug繰り返すのは悪いことのようです。Exercise35もっと良い方法はありますか?

4

3 に答える 3

3

再帰的makeで、デバッグフラグをに追加しますCPPFLAGS

debug:
    $(MAKE) CPPFLAGS="$(CPPFLAGS) /D _DBEBUG" Exercise35.exe
于 2010-01-02T02:26:06.683 に答える
1

make の次のプロパティを確認し、以下のサンプルを確認してください。

  • $@ - 現在のターゲット ファイルの名前を意味し、この場合は APP の値に対応します。
  • $< - ターゲットが依存しているターゲットよりも新しい単一のファイルを意味します。
  • $? - ターゲットが依存している現在のターゲットよりも新しいファイルのリストを意味します。
.サフィックス: .cpp.exe
CPP = cl
エクストラフラグ =
CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /ZI /TP /errorReport:prompt

ファイル = 演習 35
アプリ = Exercise35.exe

.cpp.exe:
     $(CPP) $(EXTRAFLAGS) $(CPPFLAGS) /c $<

すべて : $(APP)

$(アプリ) : $(ファイル)
     $(CPP) $(EXTRAFLAGS) $(CPPFLAGS) $@ $(FILES)

clobber : きれいな mrproper

掃除:
     del $(FILES)

適切な:
     デル $(APP)

古いメイクファイル テンプレートからこれを取得しました。このように実行することで、1 つのメイク ファイル内で特にデバッグ/リリース用のフラグをオーバーライドできるため、メイクが「インテリジェント」で柔軟に見えることに注意してください。

EXTRAFLAGS="/D_DDEBUG" を作成します

これにより、追加の定義がメイクファイルに渡され、_DDEBUGマクロが含まれます。リリースをビルドする場合は、コマンド ラインの EXTRAFLAGS を省略します。

編集: マイクの指摘によると、exe とオブジェクト コードが横たわっているディレクトリをクリーンアップできるように、追加のルールを含めると便利だと思いました...これは、AIX からのオリジナルのテンプレート makefile でした ( Linux でも使用されます...) 頭を上げてくれた Mike に感謝します!

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-01-02T02:53:06.257 に答える
0

こんばんは

デバッグ オプションを Makefile 内のマクロにする傾向があります。

CPP = cl

CPPFLAGS = /Od /D "WIN32" /D "_CONSOLE" /D \
    "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 \
    /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 \
    /nologo /c /ZI /TP /errorReport:prompt

#DEBUG = /D "_DEBUG"
DEBUG =

.SUFFIXES: .exe .cpp

Exercise35.exe:
    ${CPP} Exercise35.cpp ${CPPFLAGS} ${DEBUG}

次に、使用しない DEBUG マクロのバージョンをコメント アウトします。

ところで、$() ではなく ${} を使用して Makefile マクロを参照することをお勧めします。丸括弧はアーカイブへのオブジェクト置換に使用され、中括弧は使用されないためです。

編集: make と makefile を学習している場合は、" Managing Projects with GNU Make "の最初の数章を読むことを強くお勧めします。これは、特に make の動作の直感的ではない側面に頭を悩ませるのに役立ちます。それは逆連鎖動作です。

gmake 固有ではない小さな初版のコピーを見つけることができれば、さらに良いでしょう。その説明ははるかに優れています。

編集 2: 「 Make を使用したプロジェクトの管理」という名前の本の初版の Amazon サイトへのリンクを次に示します。上で述べたように、make がそのように動作する理由についての素晴らしい説明です。

HTH

乾杯、

于 2010-01-02T02:51:19.350 に答える