ifeq ($(KBUILD_SRC),)
我在linux内核的Makefile
中看到了上述内容。
在大多数其他脚本语言AFAIK中,它看起来不像常规if
语句。
在其他地方甚至没有endif
结束标记。
它是如何运作的?
答案 0 :(得分:0)
有可能并且有一个endif(最后你需要一些东西来关闭条件块;如果没有,那么文件的其余部分是条件的一部分我猜)。对于在其他语言中看到的常规条件,唯一真正的重大区别是,这些条件只被评估一次 - 在makefile实际执行之前。所以它们就像预处理器定义而不像真正的脚本语言。我不确定这支持的范围有多广(即在非GNU制作替代品中)。但这看起来像是使用shell脚本/ configure / cmake / etc的有趣替代方案。简单的条件和决定。
答案 1 :(得分:0)
ifeq
检查两个语句是否相等。由于第二个语句为空,因此语句basicalliy检查是否为$KBUILD_SRC
为空/未设置。通过将ifeq
替换为ifneq
,可以检查变量是否已设置。
endif
必须在某处,否则会出现语法错误,make
会抱怨。
并且......正如Mario已经解释过的那样,make使用两个阶段,第一阶段解析Makefile并扩展所有宏,包括等。它还评估条件。所以之后所有目标都是根据条件和其他包含的Makefile创建的。在第二阶段,make使用目标及其依赖项(在其他目标上)来实际执行命令(例如,构建内核)。遇到的第一个目标用作“父目标”,除非make命令包含一个或多个“父目标”