是否有任何类型的if / else语句与GNU make和Berkley make(freeBSD)兼容?
GNU MAKE:
ifeq ($(BUILD_TYPE), debug)
berkley make:
.ifdef (BUILD_TYPE)
答案 0 :(得分:6)
没有。您可以做的最好的事情是使用包含构造名称的包含文件,例如:
include $(BUILD_TYPE).mk
其中BUILD_TYPE将是“调试”或其他什么。这当然没有if / else那么强大,但是它可以以便携的方式很好地完成一组有限的事情。
通常,编写一个使用比POSIX提供的基础更复杂的任何功能的便携式makefile几乎是不可能的。 makefile语法是如此松散和自由形式,但传统的make和POSIX标准提供的功能非常贫乏,大多数供应商都创建了大量不兼容的扩展。
一般来说,当人们想到这一点时,我建议他们使用automake,它负责为您编写便携式makefile的繁琐工作,或者他们承诺制作一个或另一个,只需要人们构建它,如果他们没有它。当然,GNU make将运行在各种各样的平台上......甚至是非POSIX平台。