Makefile:带有默认参数的宏

Mar*_*ayo 3 makefile gnu-make

考虑以下 Makefile:

MAKEFLAGS += --warn-undefined-variables

define foobar
echo "$(1)"
endef

.PHONY: all
all:
    $(foobar)
Run Code Online (Sandbox Code Playgroud)

有没有办法让宏带有默认参数而不产生未定义的变量警告?我的意思是:有时我会用参数调用“foobar”,但有时不会。在后一种情况下,我希望为 $(1) 设置一个默认值。

Mad*_*ist 6

您无法在宏中设置默认值,但可以在扩展参数时轻松添加一个:

1:=

define foobar
echo "$(if $1,$1,default)"
endef

all:
        $(foobar)
        $(call foobar,biz)

$ make
echo "default"
default
echo "biz"
biz
Run Code Online (Sandbox Code Playgroud)

如果多次使用该参数会有点烦人,因为if每次使用都必须使用 。


Jen*_*ens 1

GNU make 语法非常有限;它不是一种成熟的编程语言,因此缺少很多东西,例如 make 宏中的默认参数。

但shell是一种编程语言!为什么不在目标的命令中实现您的要求呢?可能可以使用这样的东西:

all:
    if test "$(SOMECONDITION)"; then \
         do_one_thing; \
    else \
         do_something_else; \
    fi
Run Code Online (Sandbox Code Playgroud)