makefile中的shell语法

时间:2012-02-12 09:35:47

标签: makefile

ifeq ($(KBUILD_SRC),)

我在linux内核的Makefile中看到了上述内容。

在大多数其他脚本语言AFAIK中,它看起来不像常规if语句。

在其他地方甚至没有endif结束标记。

它是如何运作的?

2 个答案:

答案 0 :(得分:0)

First hit on Google

有可能并且有一个endif(最后你需要一些东西来关闭条件块;如果没有,那么文件的其余部分是条件的一部分我猜)。对于在其他语言中看到的常规条件,唯一真正的重大区别是,这些条件只被评估一次 - 在makefile实际执行之前。所以它们就像预处理器定义而不像真正的脚本语言。我不确定这支持的范围有多广(即在非GNU制作替代品中)。但这看起来像是使用shell脚本/ configure / cmake / etc的有趣替代方案。简单的条件和决定。

答案 1 :(得分:0)

ifeq检查两个语句是否相等。由于第二个语句为空,因此语句basicalliy检查是否为$KBUILD_SRC为空/未设置。通过将ifeq替换为ifneq,可以检查变量是否已设置。

endif必须在某处,否则会出现语法错误,make会抱怨。

并且......正如Mario已经解释过的那样,make使用两个阶段,第一阶段解析Makefile并扩展所有宏,包括等。它还评估条件。所以之后所有目标都是根据条件和其他包含的Makefile创建的。在第二阶段,make使用目标及其依赖项(在其他目标上)来实际执行命令(例如,构建内核)。遇到的第一个目标用作“父目标”,除非make命令包含一个或多个“父目标”