如果标志包含空格,如何从构建脚本向rustc传递标志?

如果标志包含空格,如何从构建脚本向rustc传递标志?,rust,rust-cargo,Rust,Rust Cargo,我正在编写一个带有一些C集成的Rust程序,所以我正在使用一个定制的构建脚本。在这个脚本中,我将-L传递给rustc,但这仅在不包含空格时有效。 build.rs中的确切行: println!(r"cargo:rustc-flags= -L {}/target/sdsl/sdsl_install/lib -l sdsl -l divsufsort -l divsufsort64 -l stdc++", current_dir); 如果current\u dir包含空格,则会出现此错误 错误:“

我正在编写一个带有一些C集成的Rust程序,所以我正在使用一个定制的构建脚本。在这个脚本中,我将
-L
传递给
rustc
,但这仅在
不包含空格时有效。
build.rs
中的确切行:

println!(r"cargo:rustc-flags= -L {}/target/sdsl/sdsl_install/lib -l sdsl -l divsufsort -l divsufsort64 -l stdc++", current_dir);
如果
current\u dir
包含空格,则会出现此错误

错误:“top\u tree\u compression v0.1.0”的生成脚本中只允许使用“-l”和“-l”标志(file:///home/jan/Uni/Bachelorarbeit/Programme/Top_Tree%20Compression)`:`-L/home/jan/Uni/bachelorabeit/program/Top_Tree Compression/target/sdsl/sdsl_install/lib-L sdsl-L divsufsort-L divsort64-L stdc++`

我试图在空格前写一个
\
来转义它,但它给了我同样的错误。然后,我尝试用
%20
替换空格,因为在错误消息中,空格被替换为该空格,但由于路径不正确,因此出现链接错误。

从1.29开始,您似乎无法执行此操作。委员会:

这会天真地在任何空格上分割参数,而不管它发生在何处。这似乎是货物的缺陷或限制,您应该查找已提交的问题或自己提交的问题


也就是说,如果您使用更适合用途的
rustc-link-lib
rustc-link-search
参数,则空格可以正常工作:

println!(r#"cargo:rustc-link-search={}/target/sdsl/sdsl_install/lib"#, "some thing");
$cargo run——详细
编译xx v0.1.0(file:///private/tmp/xx)
[…剪断…]
正在运行'rustc[…snip…]-L'some thing/target/sdsl/sdsl_install/lib'`

从Rust 1.29开始,您似乎无法使用。委员会:

这会天真地在任何空格上分割参数,而不管它发生在何处。这似乎是货物的缺陷或限制,您应该查找已提交的问题或自己提交的问题


也就是说,如果您使用更适合用途的
rustc-link-lib
rustc-link-search
参数,则空格可以正常工作:

println!(r#"cargo:rustc-link-search={}/target/sdsl/sdsl_install/lib"#, "some thing");
$cargo run——详细
编译xx v0.1.0(file:///private/tmp/xx)
[…剪断…]
正在运行'rustc[…snip…]-L'some thing/target/sdsl/sdsl_install/lib'`