Makefile - 如果变量未设置

时间:2016-08-04 21:31:34

标签: makefile

根据Abort makefile if variable not set的建议我尝试使用ifndef,但它无效。

生成文件:

foo:
        ifndef BAR
        $(error "Must set BAR")
        endif

但是make foo BAR=quux不起作用:

Makfile:2: *** "Must set BAR". Stop.

是什么给出的?这是空白问题吗?还是我完全误解了?

(我使用GNU Make)

我也试过了:

foo:
ifndef BAR
$(error "Must set BAR")
endif
        echo $(BAR)

这似乎有点工作,但如果调用Makefile中的目标(不需要设置变量),则仍然会调用ifndef

2 个答案:

答案 0 :(得分:4)

从技术上讲,是的,这是一个空白问题,但从根本上说这是一个范围问题。

ifndef... endif Make 条件。所以Make会在执行任何规则之前对其进行评估。由于ifndef不是配方的一部分,因此不应该在TAB之前。这有效:

ifndef BAR
$(error "Must set BAR") # this is a Make error
endif

foo:
ifndef BAR
    echo "Must set BAR" # this is a shell command
    exit 1              # this is another shell command
endif

但你做的是这个:

foo:
    ifndef BAR
    $(error "Must set BAR")
    endif

你把一个TAB放在三行(ifndef...$(error...endif)的前面,所以假设那些是命令,当有时候传递给shell foo食谱已执行。当Make执行规则时,它会扩展Make-syntax语句$(error...) - 并以错误终止 - 然后将任何内容传递给shell。

答案 1 :(得分:1)

您可以使用“if”功能。 foo : $(if $(BAR),,$(error Must set BAR))