1

いくつかの偽のターゲットで構成した大きなメイクファイルがあります。1 つはデバッグ フラグを使用してプログラムをコンパイルするためのもの、もう 1 つは最適化フラグを使用してコンパイルするためのものなどです。

私が抱えている問題の 1 つは、以前に 1 つのターゲットを使用していて、後で別のターゲットを指定した場合、すべてのファイルを新しいフラグ セットで再コンパイルする必要があることを認識していないことです。

たとえば、すべてをデバッグ ターゲットでコンパイルします。コンパイル後、プログラムをテストします。問題がないことを確認して、最適化ターゲットを使用して make を実行しようとしましたが、Make の計算によりすべてが最新であるため、何もコンパイルされません。

選択したターゲットに依存するオブジェクト ファイルの場所を作成するというアイデアがありましたが、それ以外には何もありません。

これをエレガントに処理する方法はありますか?

4

2 に答える 2

1
# Assuming you already know the type of new build
# and it is stored in this variable.
BUILD_TYPE := release

ifneq ($(MAKECMDGOALS),__clean)

# This file stores the type of the last build.
-include .last_build_type.mk

ifneq ($(__last_build_type),$(BUILD_TYPE))
.PHONY : .last_build_type.mk
.last_build_type.mk :
    @$(MAKE) __clean
    @echo '__last_build_type := $(BUILD_TYPE)' > $@
endif

else

.PHONY : __clean
__clean : clean # Delegate the job to your real 'clean' target.

endif
于 2012-07-03T20:29:57.460 に答える
0

このようなことはmakeppによって自動的にキャッチされます。

于 2012-07-08T20:17:08.890 に答える