我可以有条件地以可移植的方式在Makefile中定义宏吗?

问题描述 投票:0回答:1

当目标名称为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上工作正常,但是我不能在bmakefmake上运行(来自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

makefile
1个回答
0
投票

唯一可移植的方法是通过递归:

debug:
        $(MAKE) all DEBUG='-O0 -g'

任何符合POSIX的版本make都可以正确处理。

© www.soinside.com 2019 - 2024. All rights reserved.