首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MAKEFLAGS覆盖包含空格的make变量

用MAKEFLAGS覆盖包含空格的make变量
EN

Stack Overflow用户
提问于 2020-10-27 01:08:04
回答 1查看 86关注 0票数 1

我有一个bash脚本通过Include-What-You-Use (IWYU)运行我的基于Makefile的项目,如下所示:

代码语言:javascript
复制
#!/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的命令行选项。

我尝试了对我的调用进行各种修改来解决这个问题,但是似乎都没有解决这个问题。

使用

代码语言:javascript
复制
export MAKEFLAGS="-k CXX=iwyu\ -Xiwyu\ --transitive_includes_only\ -Xiwyu\ --mapping_file=qt5_4.imp"

命令行选项不再被删除,但是现在-k似乎突然被删除了,我的构建(由于缺少-k)由于失败而提前终止。

使用

代码语言:javascript
复制
export MAKEFLAGS="-k CXX='iwyu -Xiwyu --transitive_includes_only -Xiwyu --mapping_file=qt5_4.imp'"

我被/bin/sh: 1: Syntax error: Unterminated quoted string淹没了,看起来结尾的'不知何故被丢弃了。

有没有其他方法可以让我转义和/或引用export中的空格来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-10-27 01:45:42

您可以创建脚本(一次?)要小心运行iwyu - be,单引号和双引号不能互换:

代码语言:javascript
复制
echo 'iwyu -Xiwyu --transitive_includes_only -Xiwyu --mapping_file=qt5_4.imp "$@"' > ./run.iwyu
chmod +x ./run.iwyu

然后运行:

代码语言:javascript
复制
make -k CXX="$PWD/run.iwyu"

或者:

代码语言:javascript
复制
export MAKEFLAGS="-k CXX=$PWD/run.iwyu"

这回避了参数中空格的整个问题。如图所示,您可以指定run.iwyu脚本的完整路径,以防make进程更改目录。如果将run.iwyu脚本放在PATH上的目录中,则不需要指定脚本的完整路径。如果愿意,可以在脚本中的命令行前加上exec前缀。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64541769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档