make和gmake兼容if else语句

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)

Mad*_*ist 6

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

include $(BUILD_TYPE).mk
Run Code Online (Sandbox Code Playgroud)

其中BUILD_TYPE将是"调试"或其他什么.这肯定不像if/else那么强大,但它可以以便携的方式很好地完成一组有限的事情.

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

一般来说,当人们想知道这一点,我建议他们要么使用automake,它负责编写可移植的makefile你的繁琐的工作,要不然他们承诺一个品牌或其他,只是要求人们建立它,如果他们不有它.肯定的是,GNU make将运行在各种各样的平台上......甚至是非POSIX平台.