bash - 用 MAKEFLAGS 覆盖包含空格的 make 变量
问题描述
我有一个 bash 脚本来通过 Include-What-You-Use (IWYU) 运行我的基于 Makefile 的项目,如下所示:
#!/bin/bash
export MAKEFLAGS="-k CXX=iwyu -Xiwyu --transitive_includes_only -Xiwyu --mapping_file=qt5_4.imp"
build.sh
该build.sh
脚本设置了几个环境变量,准备构建环境的其他部分,然后最终运行make
。
乍一看,这似乎有效并完成了它的工作。然而更仔细的检查表明,这只CXX=iwyu
在构建中实际使用。IWYU 的命令行选项被删除。
我尝试了各种修改我的调用来解决这个问题,但似乎没有一个可以解决问题。
和
export MAKEFLAGS="-k CXX=iwyu\ -Xiwyu\ --transitive_includes_only\ -Xiwyu\ --mapping_file=qt5_4.imp"
命令行选项不再被丢弃,但现在突然-k
似乎被丢弃在某个地方,我的构建(因为缺少-k
)因失败而提前终止。
和
export MAKEFLAGS="-k CXX='iwyu -Xiwyu --transitive_includes_only -Xiwyu --mapping_file=qt5_4.imp'"
我被淹没了/bin/sh: 1: Syntax error: Unterminated quoted string
,看起来结局'
不知何故被丢弃了。
还有其他方法我必须逃避和/或引用我的空格export
来解决这个问题吗?
解决方案
你可以创建一个脚本(一次?)来运行iwyu
——注意,单引号和双引号不能互换:
echo 'iwyu -Xiwyu --transitive_includes_only -Xiwyu --mapping_file=qt5_4.imp "$@"' > ./run.iwyu
chmod +x ./run.iwyu
然后运行:
make -k CXX="$PWD/run.iwyu"
或者:
export MAKEFLAGS="-k CXX=$PWD/run.iwyu"
这回避了参数中空格的整个问题。如图所示,您指定run.iwyu
脚本的完整路径以防您的make
进程更改目录。如果您将run.iwyu
脚本放在您的目录中PATH
,则无需指定脚本的完整路径。如果您愿意,可以在脚本中的命令行前加上前缀exec
。
推荐阅读
- python - 找不到页面 (404) 请求方法:GET 请求 URL:http://127.0.0.1:8000/contacts/contact.html
- javascript - 2020 年使用 webpack 填充 js 应用程序的最佳方法?
- javascript - 遍历 JavaScript 中的嵌套对象和索引数组
- swift - 在 Firebase Google LogIn Xcode 11 之后进行转场
- amazon-web-services - 是否可以接收每个状态机的执行 Arns 列表
- html - 如何在 CSS 中重新显示屏幕大小上的最后一个类型元素?
- node.js - 我无法配置 reactjs
- asp.net - RouteConfig 无法从控制器中找到 URL 地址
- javascript - 使用 d3.js 在 x 轴中创建带有文本数据的多折线图
- java - 为什么运行示例 flink 应用程序会引发此错误?