Причина, по которой вы получаете оба предупреждения, заключается в том, что когда вы вызываете эту функцию (т.е. расширяете эту переменную), Make расширяет переменные внутри нее, включая оба предупреждения.Это происходит раньше, если попытаться оценить ifndef
(и, возможно, не удастся).Make просто не обрабатывает условия так, как вы хотите.
Вот способ сделать это, немного неуклюже, но эффективно.(Чтобы сделать это действительно гладко, как функция, вероятно, потребуется значительное количество черной магии).Напишите отдельный make-файл с именем variable-definition
:
# In makefile variable-definition
ifndef $(FOO)
$(warning $(FOO) is undefined)
else
$(warning $(FOO) is defined)
endif
Затем в основном make-файле:
# In the main makefile
bar = something
FOO := bar
include variable-definition
FOO := baz
include variable-definition