以下は、正しく動作していないように見える非常に単純な makefile です。
TEST=ON
buildbegin:
ifeq ($(TEST),ON)
@echo TEST PASSED
else
@echo TEST FAILED
endif
TEST 変数を何に設定しても、ifeq ステートメントは成功します。いつもTEST PASSEDと表示されます。ここで私が間違っていることを誰かが見ていますか?
編集:
わかった。私の例は正確ではありませんでした。私が実際に持っているのはこれです:
SHELL = /bin/sh
DEFAULT_TARGS:= all all_debug
DEBUG_TARGS:= all_debug
ALL_TARGS:= $(DEFAULT_TARGS) $(DEBUG_TARGS)
.PHONY: $(ALL_TARGS)
.PHONY: buildbegin
$(ALL_TARGS): buildbegin
TEST=ON
$(DEBUG_TARGS): TEST=OFF
buildbegin:
@echo $(TEST)
ifeq ($(TEST),ON)
@echo PASSED
else
@echo FAILED
endif
make all または make all_debug を実行すると、「PASSED」が出力されます。条件の前に $(TEST) をエコーすると、ルールが変数を変更しているように見えますが、ifeq はデフォルト値が何であれしか認識しません。