首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Makefile变量中使用空格保存路径

问在Makefile变量中使用空格保存路径
EN

Stack Overflow用户
提问于 2021-10-18 07:57:18
回答 1查看 279关注 0票数 1

我正在开发一个在Linux环境和Makefile环境中执行的MINGW64(通过MINGW64)。脚本有一个变量,它指向应该使用的shell命令:

代码语言:javascript
复制
SHELL:=/usr/bin/env bash

稍后,该变量将用于运行shell脚本:

代码语言:javascript
复制
${SHELL} ./utils/tests.sh

在运行良好的Linux上,但是在WindowswithMINGW64 (Git )上,它失败了,因为/usr/bin/env正在被C:/Program Files/Git/usr/local替换,并且在"Program“中有一个空格字符,它破坏了Makefile中的路径。

为了解决Windows上的问题,我可以将${SHELL}放在引号中,以确保空格字符保持不变:

代码语言:javascript
复制
"${SHELL}" ./utils/tests.sh

但是,这在Linux环境中是无法实现的,因为它现在变成了一个字符串,而且"/usr/bin/env bash"是不可执行的。

所以我想出了一个解决方案:

代码语言:javascript
复制
ifeq ($(OS),Windows_NT)
    "${SHELL}" ./utils/tests.sh
else
    ${SHELL} ./utils/tests.sh
endif

这在这两种环境(Linux和MINGW64)中都可以使用,但它的缺点是,在我想运行脚本的地方到处都有5行代码。理想情况下,我只想给变量赋值一次。我试过了,但也没用:

代码语言:javascript
复制
ifeq ($(OS),Windows_NT)
    SHELL:="/usr/bin/env" bash
else
    SHELL:=/usr/bin/env bash
endif

test: clean build
    ${SHELL} ./utils/tests.sh

有谁能巧妙地解决我的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-19 16:43:23

你可以替换:

代码语言:javascript
复制
SHELL:=/usr/bin/env bash

使用其中之一(或使用任何直接导致Bash的可执行文件的路径):

代码语言:javascript
复制
SHELL:=/bin/bash
SHELL:=/usr/bin/bash
SHELL:=bash

这就消除了方程中的空间。

尽管如此,您还应该能够直接运行这些命令,即:

代码语言:javascript
复制
./utils/tests.sh

而不是:

代码语言:javascript
复制
${SHELL} ./utils/tests.sh

这将完全消除设置和使用变量SHELL的需要。

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

https://stackoverflow.com/questions/69612558

复制
相关文章

相似问题

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