唯一有效的方法是手动将整个路径放入单引号
'
。
喜欢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 中,普通引号会阻止 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`""