当前位置:首页 > Rust > 正文

Rust语言与CMake构建系统(手把手教你用CMake构建Rust项目)

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

Rust语言与CMake构建系统(手把手教你用CMake构建Rust项目) Rust语言 CMake构建系统 Rust与CMake集成 Rust项目构建 第1张

为什么需要CMake来构建Rust项目?

虽然Rust自带强大的构建工具 cargo,但在某些场景下,比如将Rust代码作为子模块嵌入到大型C/C++项目中,或者需要统一使用CMake管理整个项目的构建流程时,就需要让CMake能够调用Rust编译器(rustc)或Cargo来构建Rust部分。

通过这种方式,我们可以实现:
- 统一构建系统
- 跨平台支持(Windows/Linux/macOS)
- 与现有CMake项目无缝集成

准备工作

在开始之前,请确保你的系统已安装以下工具:

  • Rust:可通过 rustup 安装
  • CMake:版本 ≥ 3.15(推荐 3.20+)
  • Git(可选,用于克隆示例项目)

步骤一:创建一个简单的Rust库

首先,我们创建一个名为 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

在项目根目录创建 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脚本做了以下几件事:

  1. 查找 rustccargo 工具
  2. 定义Rust源码路径和构建输出路径
  3. 使用 add_custom_command 调用 cargo build
  4. 将生成的静态库导入为CMake目标

步骤三:构建项目

在项目根目录下执行以下命令:

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

进阶提示

  • 在Windows上,静态库扩展名可能是 .lib,需根据平台调整路径
  • 可使用 CMAKE_SYSTEM_NAME 判断操作系统
  • 对于更复杂的项目,建议使用 cmake-cargo 这样的第三方模块简化配置

总结

通过本教程,你已经学会了如何使用CMake构建系统来构建Rust语言项目。这种集成方式特别适用于混合语言项目,让你既能享受Rust的安全性,又能利用CMake的强大生态。

记住,核心思想是:**CMake不直接编译Rust,而是调用Cargo完成构建,再将结果导入CMake目标中**。掌握这一点,你就能灵活应对各种复杂构建需求。

希望这篇教程对你有帮助!如果你正在探索Rust与CMake集成Rust项目构建的最佳实践,不妨动手试试吧!