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

时间:2020-10-26 17:08:04

标签: bash makefile

我有一个bash脚本,可以通过包含使用内容(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中的空格来解决此问题吗?

1 个答案:

答案 0 :(得分:3)

您可以创建脚本(一次?)来运行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

相关问题