首页 > 解决方案 > Makefile 在目标主体中设置全局变量

问题描述

我想通过一个配方设置一个全局变量,然后在另一个独立的配方中引用该变量

下面的代码是一个示例代码,它在配方中设置变量,但如果在配方之外引用,变量将保持初始值

ACTIVE = a

switch:
ifeq ($(ACTIVE),b)
    ACTIVE=$(shell echo 'a')
else
    ACTIVE=$(shell echo 'b')
endif

print:
    $(info acitve = $(ACTIVE))

我知道有一些方法可以将特定于目标的变量的值广播到依赖目标,但这不是我想要的。

标签: makefile

解决方案


您可以使用$(eval ...)它,尽管它几乎总是一个坏主意。我不得不假设您的实际情况要复杂得多,因为有许多更好的方法可以完成您在示例 makefile 中实际提供的内容。

switch:
        $(eval ACTIVE=$(if $(filter-out a,$(ACTIVE)),a,b))

推荐阅读