0

私は次のように構造化されたmakefileを持っています。

.PHONY: DEPTARG1 DEPTARG2

$(info BUILD_AGAIN is $(BUILD_AGAIN)) 

TARGET: DEPTARG1 DEPTARG2

ifeq ($(BUILD_AGAIN),y)

DEPTARG1:
     @echo Building $@
DEPTARG2:
     @echo Building $@

endif

BUILD-AGAIN が n の場合、依存関係が利用できないため、この makefile がエラーをスローすると予想していましたが、そうではありませんでした。それについての考えは大歓迎です。

追加情報として、DETARG1DEPTARG2偽のターゲットです。

BUILD_AGAIN が y の場合の出力

BUILD_AGAIN is y
Building DEPTARG1
Building DEPTARG2

BUILD_AGAIN が n の場合の出力

BUILD_AGAIN is n
make: Nothing to be done for `TARGET'.
4

1 に答える 1

0

.PHONY:条件内で宣言を移動すると、このエラーが解消されます。

そうは言っても、make組み込みのものを再作成するために多くの悪ふざけを経験しているようです。レシピを書くか書かないかは、それらを実行する方法でも実行しない方法でもありません。Makeにはそのためのフラグがありmake -B、ターゲットが最新であっても強制的に再構築します。BUILD_AGAINそのフラグの有無にかかわらず実行されている変数シェナニガンの設定全体を置き換えると、うまくいくはずです。

于 2016-12-30T12:47:46.877 に答える