在宏内定义变量

时间:2014-07-07 09:43:38

标签: macros makefile

如何在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)

我已尝试使用递归扩展进行分配,但我得到了相同的结果。

2 个答案:

答案 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