当目标名称为debug时,我一直在努力地在便携式Makefile中有条件地定义一个名为DEBUG
的宏。
.POSIX:
.SUFFIXES:
CFLAGS = -Wall -O3 $(DEBUG)
all: hello
debug: DEBUG=-O0 -g
debug: all
hello: main.o
$(CC) $(LDFLAGS) -o hello main.o $(LDLIBS)
main.o: main.c
$(CC) $(CFLAGS) -c main.c
[它在GNU Make上工作正常,但是我不能在bmake
或fmake
上运行(来自Debian的freebsd-buildutils
)。
$ fmake debug
make: don't know how to make DEBUG=-O0. Stop
根据古老的SunOS Make User's Guide,条件宏定义有一种特殊的语法,但它不起作用:
target-name := macro = value
而且,我还没有在make's official specification中找到标准的方式。
如何以可移植的方式有条件地定义DEBUG
?
唯一可移植的方法是通过递归:
debug:
$(MAKE) all DEBUG='-O0 -g'
任何符合POSIX的版本make
都可以正确处理。