在现代软件开发中,Rust语言因其内存安全性和高性能而广受欢迎。与此同时,CMake构建系统作为跨平台构建工具,在C/C++生态中占据重要地位。那么,能否将二者结合起来?答案是肯定的!本文将为初学者详细讲解如何使用CMake构建系统来构建Rust项目,即使你从未接触过CMake或Rust,也能轻松上手。

虽然Rust自带强大的构建工具 cargo,但在某些场景下,比如将Rust代码作为子模块嵌入到大型C/C++项目中,或者需要统一使用CMake管理整个项目的构建流程时,就需要让CMake能够调用Rust编译器(rustc)或Cargo来构建Rust部分。
通过这种方式,我们可以实现:
- 统一构建系统
- 跨平台支持(Windows/Linux/macOS)
- 与现有CMake项目无缝集成
在开始之前,请确保你的系统已安装以下工具:
首先,我们创建一个名为 hello_rust 的Rust库:
mkdir hello_rustcd hello_rustcargo init --lib编辑 src/lib.rs 文件,添加一个简单的函数:
// src/lib.rs#[no_mangle]pub extern "C" fn add(a: i32, b: i32) -> i32 { a + b}注意:#[no_mangle] 和 extern "C" 是为了让C/C++代码能正确调用该函数。
在项目根目录创建 CMakeLists.txt 文件,内容如下:
cmake_minimum_required(VERSION 3.15)project(RustWithCMake LANGUAGES CXX)# 查找Rust编译器find_program(RUSTC rustc REQUIRED)find_program(CARGO cargo REQUIRED)# 设置Rust源码目录set(RUST_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})set(RUST_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/rust_target)# 自定义命令:使用cargo构建Rust库add_custom_command( OUTPUT ${RUST_TARGET_DIR}/libhello_rust.a COMMAND ${CARGO} build --release --target-dir ${RUST_TARGET_DIR} WORKING_DIRECTORY ${RUST_SOURCE_DIR} DEPENDS ${RUST_SOURCE_DIR}/Cargo.toml ${RUST_SOURCE_DIR}/src/lib.rs COMMENT "Building Rust library with Cargo")# 添加静态库目标add_library(hello_rust STATIC IMPORTED GLOBAL)set_property(TARGET hello_rust PROPERTY IMPORTED_LOCATION ${RUST_TARGET_DIR}/release/libhello_rust.a # Linux/macOS # Windows下可能是 libhello_rust.lib 或 hello_rust.lib)# 确保在构建主项目前先构建Rust库add_custom_target(build_rust_lib ALL DEPENDS ${RUST_TARGET_DIR}/libhello_rust.a)# 示例:链接到C++可执行文件(可选)# add_executable(main main.cpp)# target_link_libraries(main hello_rust)上面的CMake脚本做了以下几件事:
rustc 和 cargo 工具add_custom_command 调用 cargo build在项目根目录下执行以下命令:
mkdir buildcd buildcmake ..cmake --build .如果一切顺利,你会看到类似如下的输出:
[ 50%] Building Rust library with Cargo Compiling hello_rust v0.1.0 (...) Finished release [optimized] target(s) in 0.5s[100%] Built target build_rust_lib.lib,需根据平台调整路径CMAKE_SYSTEM_NAME 判断操作系统通过本教程,你已经学会了如何使用CMake构建系统来构建Rust语言项目。这种集成方式特别适用于混合语言项目,让你既能享受Rust的安全性,又能利用CMake的强大生态。
记住,核心思想是:**CMake不直接编译Rust,而是调用Cargo完成构建,再将结果导入CMake目标中**。掌握这一点,你就能灵活应对各种复杂构建需求。
希望这篇教程对你有帮助!如果你正在探索Rust与CMake集成或Rust项目构建的最佳实践,不妨动手试试吧!
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251211853.html