CMake进行交叉编译,有哪些变量可控制

在 CMake 交叉编译中,涉及的工具链变量较多,主要包括 编译器、链接器、二进制工具、系统信息、路径控制 等类别。以下是完整的分类总结:


1. 核心编译器变量(必须配置)

变量名 用途说明 示例(ARM 交叉编译)
CMAKE_C_COMPILER C 编译器路径 arm-linux-gnueabihf-gcc
CMAKE_CXX_COMPILER C++ 编译器路径 arm-linux-gnueabihf-g++
CMAKE_ASM_COMPILER 汇编器路径(可选) arm-linux-gnueabihf-as

2. 工具链工具变量(推荐配置)

变量名 用途说明 示例
CMAKE_AR 静态库归档工具(ar arm-linux-gnueabihf-ar
CMAKE_RANLIB 生成静态库索引(ranlib arm-linux-gnueabihf-ranlib
CMAKE_LINKER 链接器(ld,非 GCC 时需指定) arm-linux-gnueabihf-ld
CMAKE_NM 查看符号表(nm arm-linux-gnueabihf-nm
CMAKE_OBJCOPY 二进制转换工具(objcopy arm-linux-gnueabihf-objcopy
CMAKE_OBJDUMP 反汇编工具(objdump arm-linux-gnueabihf-objdump
CMAKE_STRIP 剥离调试符号(strip arm-linux-gnueabihf-strip
CMAKE_READELF ELF 文件分析工具(readelf arm-linux-gnueabihf-readelf

3. 系统与目标平台变量(必须配置)

变量名 用途说明 示例
CMAKE_SYSTEM_NAME 目标系统名称(如 Linux、Android) Linux
CMAKE_SYSTEM_PROCESSOR 目标处理器架构(如 ARM、x86_64) arm
CMAKE_SYSTEM_VERSION 目标系统版本(可选) 1.0

4. 路径与查找控制变量(可选配置)

变量名 用途说明
CMAKE_FIND_ROOT_PATH 指定交叉编译的根目录(如 SDK 路径)
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM 控制可执行程序的查找方式(NEVER/ONLY
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY 控制库文件的查找方式
CMAKE_FIND_ROOT_PATH_MODE_INCLUDE 控制头文件的查找方式
CMAKE_STAGING_PREFIX 临时安装路径(用于分阶段构建)

5. 高级控制变量(特殊场景)

变量名 用途说明
CMAKE_CROSSCOMPILING 显式声明当前为交叉编译(通常自动检测)
CMAKE_<LANG>_FLAGS 指定编译器标志(如 CMAKE_C_FLAGS
CMAKE_EXE_LINKER_FLAGS 指定可执行文件的链接标志
CMAKE_MODULE_LINKER_FLAGS 指定动态库的链接标志

6. 完整工具链文件示例

# toolchain-arm-linux.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 编译器路径
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

# 工具链工具
set(CMAKE_AR arm-linux-gnueabihf-ar)
set(CMAKE_RANLIB arm-linux-gnueabihf-ranlib)
set(CMAKE_OBJCOPY arm-linux-gnueabihf-objcopy)
set(CMAKE_OBJDUMP arm-linux-gnueabihf-objdump)

# 查找路径控制
set(CMAKE_FIND_ROOT_PATH /opt/arm-sdk)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

总结

  • 必须配置CMAKE_C_COMPILERCMAKE_CXX_COMPILERCMAKE_SYSTEM_NAME
  • 推荐配置CMAKE_ARCMAKE_RANLIBCMAKE_OBJCOPY(涉及静态库时需指定)。
  • 可选配置:其他工具(如 OBJDUMPSTRIP)和路径控制变量。
  • 总变量数:约 20-30 个(根据实际需求选择)。

官方文档参考:CMake Toolchain Variables

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容