変数の値に基づいて特定のターゲットを再構築する方法はありますか?
DEBUGというコマンドライン設定のMakefileがあります。「makeDEBUG=no」を実行した後、「make DEBUG = yes」を呼び出したときに、特定のオブジェクトファイルを(デバッグ情報を含めるために)再構築したい。
変数の値に基づいて特定のターゲットを再構築する方法はありますか?
DEBUGというコマンドライン設定のMakefileがあります。「makeDEBUG=no」を実行した後、「make DEBUG = yes」を呼び出したときに、特定のオブジェクトファイルを(デバッグ情報を含めるために)再構築したい。
ファイルが存在しない場合、または別の値を持っている場合は、その変数の値をファイルに書き込みます。すべてのオブジェクト ファイルがそのファイルに依存するようにして、ファイルが変更されるたびにすべてのオブジェクト ファイルが再コンパイルされるようにします。例えば:
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 が必要です。