Подтвердить что ты не робот

Проверка, определены ли переменные в make файле

У меня есть файл Makefile GNU (версия 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

Я просмотрел документацию к файлам и увидел, что другие используют его., Любая помощь приветствуется, возможно, что-то глупое.

4b9b3361

Ответ 1

Скорее всего, ваши директивы make не должны иметь вкладку с отступом, но начинаются в первом столбце. Я также подозреваю, что вы хотите .if(...) или аналогичный, а не простой ifdef. Трудно сказать, не зная, какую реализацию make вы используете.

В GNU make используются условные части, например. как это

ifeq ($(CC),gcc)
        $(CC) -o foo $(objects) $(libs_for_gcc)
else
        $(CC) -o foo $(objects) $(normal_libs)
endif

Инструкция GNU содержит все подробности.

Если вы действительно хотите протестировать переменную environment (в отличие от переменной make), просто сделайте это в командах:

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

Обратите внимание, что $$ передается оболочке как одиночный $, и все должно быть единственной командой для оболочки, следовательно, точки с запятой и обратная косая черта/новые строки.

Ответ 2

Если строка начинается с вкладки, она будет считаться частью рецепта правила. Дополнительные пробелы разрешены и игнорируются в начале строки условной директивы, но вкладка не допускается.