制造与发展gmake兼容if else语句

时间:2012-02-01 12:44:03

标签: makefile gnu gnu-make bsdmake

是否有任何类型的if / else语句与GNU make和Berkley make(freeBSD)兼容?

GNU MAKE:

 ifeq ($(BUILD_TYPE), debug)

berkley make:

.ifdef (BUILD_TYPE)

1 个答案:

答案 0 :(得分:6)

没有。您可以做的最好的事情是使用包含构造名称的包含文件,例如:

include $(BUILD_TYPE).mk

其中BUILD_TYPE将是“调试”或其他什么。这当然没有if / else那么强大,但是它可以以便携的方式很好地完成一组有限的事情。

通常,编写一个使用比POSIX提供的基础更复杂的任何功能的便携式makefile几乎是不可能的。 makefile语法是如此松散和自由形式,但传统的make和POSIX标准提供的功能非常贫乏,大多数供应商都创建了大量不兼容的扩展。

一般来说,当人们想到这一点时,我建议他们使用automake,它负责为您编写便携式makefile的繁琐工作,或者他们承诺制作一个或另一个,只需要人们构建它,如果他们没有它。当然,GNU make将运行在各种各样的平台上......甚至是非POSIX平台。