检查makefile宏中定义的变量

时间:2017-03-08 17:26:25

标签: makefile macros gnu-make

我在使GNU Makefile宏按照我希望的方式工作时遇到了一些麻烦。这是我的测试:

TEST1 = defined
#TEST2 = defined

define add_ext
ifndef $(1)
    $(error $(1) not defined)
endif

$(1)_EXT = $(1).extended
endef

TESTS = TEST1 TESTS2

$(foreach test,$(TESTS),$(eval $(call add_ext,$(test))))

all:
    @echo TEST1: $(TEST1), $(TEST1_EXT)
    @echo TEST2: $(TEST2), $(TEST2_EXT)

宏应该接受变量的名称,宏首先检查它是否已经定义,然后创建一个关联的变量。

鉴于我已评论TEST2,我预计TEST2会失败。但这是错误信息:

Makefile:15: *** TEST1 not defined.  Stop.

这与Buildroot在Makefile中的作用非常相似: https://git.buildroot.net/buildroot/tree/package/pkg-generic.mk#n409

任何人都知道我的麻烦在哪里?

1 个答案:

答案 0 :(得分:1)

您需要在宏定义中转义make-functions,即

define add_ext
ifndef $(1)
$$(error $(1) not defined)
endif

$(1)_EXT = $(1).extended
endef

另外,在你的:

ifndef $(1)
    $(error $(1) not defined)
endif

我无法判断$(error ...)是否按制表符或空格缩进,但是它 不能用制表符缩进,所以最好不要缩进。