Ниже приведен очень простой make-файл, который, похоже, не работает должным образом.
TEST=ON
buildbegin:
ifeq ($(TEST),ON)
@echo TEST PASSED
else
@echo TEST FAILED
endif
Независимо от того, что я установил для переменной TEST, мой оператор ifeq проходит. Я всегда вижу ТЕСТ ПРОШЕЛ. Кто-нибудь видит, что я делаю неправильно здесь?
РЕДАКТИРОВАТЬ:
в порядке. мой пример был не совсем точен. На самом деле у меня есть вот это:
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 _приведет к выводу «PASSED». Если я вывожу $ (TEST )перед условием, это выглядит так, как будто мои правила изменяют переменную, но ifeq всегда видит только то, что имеет значение по умолчанию.