我的fix
为FreeBSD
,并且发现11.0
无法处理make
指令。例如:
ifdef
ifdef VERBOSE
Q :=
else
Q := @
endif
会抱怨:
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
代替。那么gmake
上的make
端口是否支持处理FreeBSD
?
答案 0 :(得分:4)
BSD make使用不同的语法,并且具有与GNU make不同的功能。您显示的代码段应如下所示:BSD make:
.ifdef VERBOSE
Q :=
.else
Q := @
.endif
您基本上有三种选择:
make
。make
工具实现的make
的最基本的功能(例如,不使用任何模式规则等)。这可能很乏味,还有其他工具可以帮助管理生成 Makefile,如cmake
或 GNU autotools 。GNUmakefile
可能是一个好主意,因此它永远不会被任何其他make
解释而不是GNU make)并且依赖于GNU make可用的事实几乎到处都是对于FreeBSD,这意味着要安装适当的端口。如果您使用第三个选项,则可以添加“包装器”Makefile
,例如这样:
GNUMAKE?= gmake
all:
${GNUMAKE} $@
.DEFAULT:
${GNUMAKE} $@
.PHONY: all
在BSD上键入make
将导致BSD make读取此文件并相应地调用gmake
。在GNU系统上(其中make
是GNU make),当GNUmakefile
时,该文件将被忽略 - GNU make优先于Makefile
。
答案 1 :(得分:0)
一种更便携的方式来写这样的东西:
Q$(VERBOSE) := @