gpt4 book ai didi

rust - 如果标志包含空格,我如何将标志从构建脚本传递给 rustc?

转载 作者:行者123 更新时间:2023-11-29 08:24:50 35 4
gpt4 key购买 nike

我正在编写一个带有一些 C 集成的 Rust 程序,所以我使用的是自定义构建脚本。在这个脚本中,我传递了 -L <path to library>rustc , 但这仅适用于 <path to library>不包含空格。build.rs 中的确切行:

println!(r"cargo:rustc-flags= -L {}/target/sdsl/sdsl_install/lib -l sdsl -l divsufsort -l divsufsort64 -l stdc++", current_dir);

如果current_dir包含一个空格我得到这个错误

error: Only `-l` and `-L` flags are allowed in build script of `top_tree_compression v0.1.0 (file:///home/jan/Uni/Bachelorarbeit/Programme/Top_Tree%20Compression)`: `-L /home/jan/Uni/Bachelorarbeit/Programme/Top_Tree Compression/target/sdsl/sdsl_install/lib -l sdsl -l divsufsort -l divsufsort64 -l stdc++`

我试着写一个 \在逃避它的空间之前,但它给了我同样的错误。然后我尝试用 %20 替换空格因为在错误消息中,空格被替换为这个,但随后我收到链接错误,因为路径不正确。

最佳答案

从 Rust 1.29 开始,您似乎不能。 source code for the current master of Cargo :

let mut flags_iter = value
.split(|c: char| c.is_whitespace())
.filter(|w| w.chars().any(|c| !c.is_whitespace()));

这天真地在任何空格上拆分参数,无论它出现在哪里。这似乎是 Cargo 的错误或限制,您应该查找已提交的问题或自己提交问题。


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

println!(r#"cargo:rustc-link-search={}/target/sdsl/sdsl_install/lib"#, "some thing");
$ cargo run --verbose
Compiling xx v0.1.0 (file:///private/tmp/xx)
[...snip...]
Running `rustc [...snip...] -L 'some thing/target/sdsl/sdsl_install/lib'`

关于rust - 如果标志包含空格,我如何将标志从构建脚本传递给 rustc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52339475/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com