如何在GNU make宏中定义变量?我正在使用GNU Make 4.0,每当我进行赋值时,变量都是空的:
define TEST_MACRO
$(info $(1))
test_var := $(1)
$(info $(test_var))
endef
$(call TEST_MACRO,test)
输出:
test
(blank line)
我已尝试使用递归扩展进行分配,但我得到了相同的结果。
答案 0 :(得分:3)
您还没有提到使用哪个版本的Make,并且在处理宏时版本之间存在细微差别。但这对我有用(使用GNUMake 3.81):
define TEST_MACRO
$(info A $(1))
test_var := $(1)
$$(info B $$(test_var))
endef
$(eval $(call TEST_MACRO,test))
答案 1 :(得分:0)
我最终选择了这样的东西,因为我觉得双$
很混乱。
define TEST_MACRO
$(info B $(test_var))
endef
# Note test_var was defined after TEST_MACRO
test_var := test
$(eval $(value TEST_MACRO))
这样做的缺点是您无法设置$1..$n
个变量,但它更容易阅读。
编辑 - 在宏内部定义变量的更好示例。上面的示例演示了如何将值传递到宏中,就像使用call
define TEST_MACRO
test_var := test
$(info B $(test_var))
endef