bash - 如何在 makfile 命令中使用 eval 使用 bash 变量更改宏值
问题描述
我在 makefile 命令中有一个 bash 函数,并且想要更改宏值。可能吗?
C_DFLAGS :=
gui :
parse_flags () { echo $$1; for word in $$1; do if [ $${word::2} = -D ] ; then $(eval C_D_FLAGS+=$${word}); fi ; done ; } ; parse_flags "-D/test -D/TEST"
@echo "C_D_FLAGS :$(C_D_FLAGS)"
解决方案
$(eval)
将在您的实际 bash 函数调用之前进行解释。您不能make
从 bash 更新变量 - 这是一个下游过程。
但是,您尝试运行的代码很容易用本机语法替换,即:
$ cat Makefile
C_D_FLAGS :=
gui: C_D_FLAGS += -D/test -D/TEST
gui:
@echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS: -D/test -D/TEST
如果标志是从其他地方提供的,它们也可以被过滤,即:
$ cat Makefile
C_D_FLAGS :=
gui: C_D_FLAGS += $(filter -D%,$(EXTRA_FLAGS))
gui:
@echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS:
$ make gui EXTRA_FLAGS="-Isomething -DFOO -m32"
C_D_FLAGS: -DFOO
推荐阅读
- sql - 插入或更新的值过高或过低时的 SQL 触发器
- javascript - 如何在类中将事件作为对象值发出?
- c++ - 有什么方法或想法来保护或签署源代码?
- angular - AG-Grid /w Angular 11 错误:目标入口点“ag-grid-angular”缺少依赖项
- typescript - 如何在 typescript 中为包含 yield* 委托的 redux-saga 生成器函数编写类型
- firebase - Android 上的 Flutter/Firebase verifyPhoneNumber() 总是调用 recaptcha “验证你不是机器人”
- javascript - 如何在 Javascript 中设置对象属性的样式?我收到“未捕获的类型错误:无法设置未定义的属性 'fontWeight'”
- html - 如何防止用户从演示中下载 HTML 模板?
- swiftui - 我们如何在导航视图中添加带有侧边栏图标的搜索栏?
- c++ - 尝试在 C++ 中的 mongoDB 中插入/查找文档时出现“无法为密码启动 SASLPrep:通用服务器错误”错误