在makefile中,如何使规则内的变量变为全局变量?

时间:2019-01-10 14:41:32

标签: c makefile

我有一个带有单独规则的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”

但是我想要“ test var是/ path / to / another / folder”

谢谢!

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

当我运行此代码时,出现错误***没有规则使目标“ /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 / rule1文件夹 和 / path / to / rule2folder 两者都有自己独特的file_i_want_compiled.c

例如,我用 make rule1 调用make

1 个答案:

答案 0 :(得分:0)

您实际上是在正确设置变量,但是没有在配方上下文中评估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))