【发布时间】:2021-06-03 02:48:53
【问题描述】:
在学习 rust 时,我有一种粗略的方法来构建一个非 rust 的 c/c++ 库,该库位于子模块中。我的构建脚本 (build.rs) 现在看起来像:
use std::process::Command;
fn main() {
// EXTERN_C
// Build the c-library
Command::new("make").args(&["-C", "cadd"]).status().unwrap();
// The name of the library to link to, i.e. like: -l<lib>
println!("cargo:rustc-link-lib=dylib=add_x64Linuxd");
// The library search path for linking, i.e. like -L<path>
println!("cargo:rustc-link-search=native=cadd/lib");
// The run-time library search path (LD_LIBRARY_PATH)
println!("cargo:rustc-env=LD_LIBRARY_PATH=cadd/lib");
}
这运行得很好,cadd/ 中的 makefile 可以整理出任何构建/重新构建的 deps 等。目前我唯一不能做的就是在运行 cargo clean 时挂钩 make -C cadd clean。理想情况下,我希望它同时运行 clean make 目标。该命令如下所示:
Command::new("make").args(&["-C", "cadd", "clean"]).status().unwrap();
但我不知道如何在cargo clean 期间运行这样的命令。是否有像“构建脚本”一样的“干净脚本”或其他方法?
最终我将开始学习如何将我的 makefile 项目包装到一个货物箱中(我认为这是正确的术语) - 所以我知道这不是做到这一点的最佳方式,但我想让它工作首先是基本的方式(所以我的头不会爆炸!)。
【问题讨论】:
-
生成的文件应该在
CARGO_TARGET_DIR目录doc.rust-lang.org/cargo/reference/config.html#buildtarget-dir -
我不认为这是一个好的复制,更多或“另见”。特别是它没有提及
cargo clean或cargo clean所做的事情(仅删除目标文件夹)。
标签: rust rust-cargo