我在使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
任何人都知道我的麻烦在哪里?
答案 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 ...)
是否按制表符或空格缩进,但是它
不能用制表符缩进,所以最好不要缩进。