首页 > 解决方案 > 在 makefile 中,如何使规则中的变量成为全局变量?

问题描述

我有一个带有单独规则的生成文件,这些规则设置了一个同名的变量。如何在规则中将此变量设置为全局变量,以便以后可以使用它。

rule1: test_var=/path/to/folder/

rule2: test_var=/path/to/another/folder/

$(info test_var is $(test_var))

当我调用“make rule2”时,它说“test var is”

但我想要“测试变量是 /path/to/another/folder”

谢谢!

编辑我可能过于简化了我的方法,我认为我有全局变量的想法,但 make 可能不应该那样使用。这是下面的问题。

当我运行此代码时,我收到错误 *** No rule to make target '/file_i_want_compiled.c','out/IceCream' 需要。停止

LINK:= -lpthread
C_SRCS = 
C_SRCS += folder1/file1.c
C_FLAGS:= -stf=gnu11

OBJ_PATH= out/objects/

rule1: path = /path/to/rule1folder
.PHONY : rule1
rule2: path = /path/to/rule2folder
.PHONY : rule2

C_SRCS_NO_DIR := $(notdir $(C_SRCS))
C_OBJS        := $(C_SRCS_NO_DIR:%.c=$(OBJ_PATH)%.o
C_OBJS        += $(path)/file_i_want_compiled.o

out/IceCream: GEN_ICECREAM $(C_OBJS) $(OBJ_PATH)IceCream.o
    $(CC) $(C_FLAGS) $(C_OBJS) %(OBJ_PATH)IceCream.o -o $@ $(LINK)

/path/to/rule1folder 和 /path/to/rule2folder 都有自己独特的 file_i_want_compiled.c

例如,我用make rule1调用 make

标签: cmakefile

解决方案


您实际上是在正确设置变量,但 info 语句并未在配方的上下文中进行评估。您可以通过查看非常冗长的输出来检查这一点 make -d rule1。请注意,info 语句在任何规则之前进行评估。

您可以通过执行类似的操作在规则的上下文中将其打印出来

rule1: test_var=/path/to/folder/

rule2: test_var=/path/to/another/folder/

rule%:
    $(info test_var is $(test_var))

推荐阅读