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