abr*_*hab 6 gnu makefile gnu-make bsdmake
是否有任何类型的if/else语句与GNU make和Berkley make(freeBSD)兼容?
GNU MAKE:
ifeq ($(BUILD_TYPE), debug)
Run Code Online (Sandbox Code Playgroud)
伯克利制造:
.ifdef (BUILD_TYPE)
Run Code Online (Sandbox Code Playgroud)
不可以.您可以做的最好的事情是使用带有构造名称的包含文件,例如:
include $(BUILD_TYPE).mk
Run Code Online (Sandbox Code Playgroud)
其中BUILD_TYPE将是"调试"或其他什么.这肯定不像if/else那么强大,但它可以以便携的方式很好地完成一组有限的事情.
通常,编写一个使用比POSIX提供的基础更复杂的任何功能的便携式makefile几乎是不可能的.makefile语法是如此松散和自由形式,但传统的make和POSIX标准提供的功能非常贫乏,大多数供应商都创建了大量不兼容的扩展.
一般来说,当人们想知道这一点,我建议他们要么使用automake,它负责编写可移植的makefile你的繁琐的工作,要不然他们承诺一个品牌或其他,只是要求人们建立它,如果他们不有它.肯定的是,GNU make将运行在各种各样的平台上......甚至是非POSIX平台.