c - 在 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
解决方案
您实际上是在正确设置变量,但 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))
推荐阅读
- javascript - 在 ElasticSearch 中为文档字段赋予不同的优先级
- android-room - 尝试从分页 3 寻呼机内的房间获取寻呼源时出现“无法访问主线程上的数据库”错误
- java - 更改存储在不同线程上的列表中的对象的字段
- c# - 如何在 ConfigureServices 中创建依赖于数据库上下文的实例
- google-cloud-platform - 谷歌文档人工智能
- python - python的VSCode自动完成字符串参数
- python - 无法使用 python selenium 单击电子邮件验证按钮
- android - android.util.AndroidRuntimeException:从 Activity 标志外调用 startActivity()
- python - 用最少的文档在 escpos-python 上打印繁体中文字符
- vue.js - 如何在本地存储中从具有纪元时间的项目列表中呈现格式化的日期时间