Nan*_*iao 3 freebsd makefile gnu-make
我的FreeBSD
是11.0
,并发现make
无法处理ifdef
指令。例如:
ifdef VERBOSE
Q :=
else
Q := @
endif
Run Code Online (Sandbox Code Playgroud)
该make
会抱怨:
make: "/root/Project/powermon/Makefile" line 13: Need an operator
make: "/root/Project/powermon/Makefile" line 15: Need an operator
make: "/root/Project/powermon/Makefile" line 17: Need an operator
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案正在使用gmake
。那么是否有任何make
端口FreeBSD
支持处理ifdef
?
小智 5
BSD make 使用不同的语法并具有与 GNU make 不同的特性。对于 BSD make,您显示的代码段应如下所示:
.ifdef VERBOSE
Q :=
.else
Q := @
.endif
Run Code Online (Sandbox Code Playgroud)
您基本上有三个选择:
make
。make
make
cmake
GNUmakefile
,因此它永远不会被make
GNU make 之外的任何人解释)并依赖于 GNU make 几乎随处可用的事实。对于 FreeBSD,这意味着安装适当的端口。如果您使用第三个选项,您可以添加一个“包装器” Makefile
,例如:
GNUMAKE?= gmake
all:
${GNUMAKE} $@
.DEFAULT:
${GNUMAKE} $@
.PHONY: all
Run Code Online (Sandbox Code Playgroud)
make
在 BSD 上键入将导致 BSD make 读取此文件并相应地调用gmake
. 在GNU系统(其中make
是GNU MAKE),当有这个文件将被忽略GNUmakefile
- GNU化妆喜欢这种经过短短Makefile
。