0

変数の値に基づいて特定のターゲットを再構築する方法はありますか?

DEBUGというコマンドライン設定のMakefileがあります。「makeDEBUG=no」を実行した後、「make DEBUG = yes」を呼び出したときに、特定のオブジェクトファイルを(デバッグ情報を含めるために)再構築したい。

4

1 に答える 1

0

ファイルが存在しない場合、または別の値を持っている場合は、その変数の値をファイルに書き込みます。すべてのオブジェクト ファイルがそのファイルに依存するようにして、ファイルが変更されるたびにすべてのオブジェクト ファイルが再コンパイルされるようにします。例えば:

BUILD := debug
SHELL := /bin/bash
$(shell [[ `cat .build 2>/dev/null` == ${BUILD} ]] || echo ${BUILD} > .build)

all : prog

prog : .build
    touch $@

clean :
    rm prog .build

.PHONY: all clean

実行例:

$ make
touch prog
$ make
make: Nothing to be done for `all'.
$ make BUILD=release
touch prog
$ make BUILD=release
make: Nothing to be done for `all'.

より良い方法は、MSVS のようにデバッグ ビルドとリリース ビルドを別のディレクトリにビルドすることですが、それにはもう少し高度な makefile が必要です。

于 2012-08-30T08:33:43.217 に答える