我如何在 Windows powershell 上的 cmake 中正确包含带空格的路径,并使用变量或命令对其进行扩充以传递给 gcc?

问题描述 投票:0回答:1

唯一有效的方法是手动将整个路径放入单引号

'
。 喜欢
cmake -G Ninja -DCMAKE_CXX_COMPILER=g++ -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_FLAGS='-IC:/Program" "Files" "(x86)/Windows" "Kits/10/Include/x/um' -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_BUILD_TYPE=Release -S ..
它全部封装在
'
中,空格封装在
"
中,这是它工作的唯一方式,但问题是
x
目录更改,所以我用
$((ls 'C:/Program Files (x86)/Windows Kits/10/Include')[0].name)
代替 x 以获得第一个可用的版本,但我无法在
'
中调用命令或变量。

DCMAKE_CXX_FLAGS='-IC:/Program" "Files" "(x86)/Windows" "Kits/10/Include/x/um'
是我正在谈论的部分

我在空格之前尝试了

\
,在空格之前和之后尝试了
'
,使用
"
将整个事物包裹起来,以某种方式仍然逃脱了空格,与空格之前的
\
相同,只包裹了带有
"
的空格都会破坏路径,导致相同的错误:
g++.exe: warning: Files: linker input file unused because linking not done

g++.exe: error: Files: linker input file not found: No such file or directory

g++.exe: warning: (x86)/Windows: linker input file unused because linking not done

g++.exe: error: (x86)/Windows: linker input file not found: No such file or directory

g++.exe: warning: Kits/10/Include: linker input file unused because linking not done

g++.exe: error: Kits/10/Include: linker input file not found: No such file or directory

我尝试过其他事情,比如之前将路径放入变量中,但它也会中断,我尝试将变量分段为

$f="'"
$r='"'
作为最终变量的一部分或直接在 cmake 命令中,但结果仍然相同。动态获取目录真的不可能,我必须在这里硬编码吗?我在 linux bash shell 中尝试了类似的操作,在同一个 cmake 标志中使用空格和变量来包含某些内容,但没有任何问题,所以我很困惑为什么会发生这种情况,并且无法找到解决方法。

powershell gcc cmake environment-variables escaping
1个回答
0
投票

在 Powershell 中,普通引号会阻止 shell 将字符串分解为单独的单词,并且转义的引号会被视为文字字符。反引号是转义字符。

这些应该有效:

    -DCMAKE_CXX_FLAGS="`"/your path/with spaces`""
    -DCMAKE_CXX_FLAGS=`"$((your command)[0].name)`"
    -DCMAKE_CXX_FLAGS="`"$((your command)[0].name) and some thing/ with spaces`""
© www.soinside.com 2019 - 2024. All rights reserved.