Makefile在目标正文中设置全局变量
我想通过一个配方设置一个全局变量,然后在另一个独立的配方中引用该变量 下面的代码是一个示例代码,用于在配方内设置变量,但如果在配方外引用,则该变量将保留初始值Makefile在目标正文中设置全局变量,makefile,Makefile,我想通过一个配方设置一个全局变量,然后在另一个独立的配方中引用该变量 下面的代码是一个示例代码,用于在配方内设置变量,但如果在配方外引用,则该变量将保留初始值 ACTIVE = a switch: ifeq ($(ACTIVE),b) ACTIVE=$(shell echo 'a') else ACTIVE=$(shell echo 'b') endif print: $(info acitve = $(ACTIVE)) 我知道有一些方法可以将特定于目标的变量的值广
ACTIVE = a
switch:
ifeq ($(ACTIVE),b)
ACTIVE=$(shell echo 'a')
else
ACTIVE=$(shell echo 'b')
endif
print:
$(info acitve = $(ACTIVE))
我知道有一些方法可以将特定于目标的变量的值广播给相关目标,但这不是我想要的。您可以使用$(eval…
来实现这一点,尽管这几乎总是一个坏主意。我必须假设您的实际情况要复杂得多,因为有很多更好的方法来完成您在示例makefile中实际提供的内容
switch:
$(eval ACTIVE=$(if $(filter-out a,$(ACTIVE)),a,b))
eval函数在配方范围内工作。运行
make print
时,值仍然是a
如何调用make?如果未运行开关
目标,则不会重置活动
<代码>评估修改品牌的全局状态,因此,在switch
目标运行后,ACTIVE
的全局值在任何地方都会不同。make switch
然后make print
printsa
静止,但是make switch print
工作是否正常确保:运行make switch
更改ACTIVE
变量的值调用make
。一旦退出,make调用所知道的一切都消失了。再次启动make
时,它已返回默认设置。如果您希望在make的调用中保持更改,而不仅仅是单个make调用中的目标之间,那么这与您所问的问题完全不同。为此,您必须在文件系统中保留ACTIVE
的“当前”值,以便下次调用make
可以检索它。