Проверка, определены ли переменные в файле 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

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


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