检查makefile宏中定义的变量

检查makefile宏中定义的变量,makefile,macros,gnu-make,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))))

我在让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在其Makefiles中所做的非常相似:


有人知道我的问题出在哪里吗?

您需要在宏定义中转义make函数,即

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

$(1)_EXT = $(1).extended
endef
此外,在您的:

ifndef $(1)
    $(error $(1) not defined)
endif
我不知道
$(error…
是用制表符还是空格缩进的,但是
不能缩进制表符,所以最好不要缩进。

Aw shot,它必须是这么简单的东西。谢谢