Проверка, определены ли переменные в файле makefile
У меня есть файл GNU Makefile (версия 3.81), который выглядит следующим образом:
.PHONY: SPOneDot
SPOneDot:
ifndef X
X=0.05
$$(info X undefined, changed to $X)
endif
ifndef Y
Y=0.05
$$(info Y undefined, changed to $Y)
endif
python ./Submit3DSP.py -f OneDot.qdt -x $(X) -y $(Y)
Я выполняю со следующей командной строкой:make X=0.1 Y=0.1 SPOneDot
но я получаю следующий результат:
ifndef X
make: ifndef: Command not found
make: *** [SPOneDot] Error 127
Я посмотрел в документация makefile и увидел другим. Любая помощь ценится, это, вероятно, что-то глупое.
2 ответов
скорее всего, ваши директивыне должно быть отступа табуляции но начните с первой колонки.
Я также подозреваю, что вы хотите .if(...)
или аналогичный, не простой ifdef
. Трудно сказать, не зная чего!--4--> реализация, которую вы используете.
в GNU make условные части используются, например, вот так
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
на GNU сделать руководство все подробности.
если вы действительно хотите проверить окружающая среда переменной (вместо переменная), затем просто сделайте это в командах:
SPOneDot:
if test -z "$$X"; then X=0.05; echo "X undefined, changed to $$X"; fi; \
if test -z "$$Y"; then Y=0.05; echo "Y undefined, changed to $$Y"; fi; \
python ./Submit3DSP.py -f OneDot.qdt -x $$X -y $$Y
отметим, что $$
передается в оболочку как один $
и все должно быть одной командой для оболочки, отсюда точки с запятой и обратная косая черта/новые строки.
если строка начинается с вкладки, она будет считаться частью рецепта для Правила. Дополнительные пробелы разрешены и игнорируются в начале строки условной директивы, но вкладка не разрешена.