项目的CMake构建系统原生支持交叉编译。所有交叉编译相关的配置都集中在 arm.cmake 文件中,通过在运行cmake时指定它为工具链文件来启用。

1. 工具链配置文件 (arm.cmake)

该文件的核心是告诉CMake在哪里找到交叉编译器以及如何设置环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 设置目标系统名称
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 指定交叉编译工具链的路径
set(TOOLCHAIN_DIR "/usr/local/arm/5.4.0/usr/")

# 指定编译器
set(CMAKE_C_COMPILER "${TOOLCHAIN_DIR}/bin/arm-linux-gcc")
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_DIR}/bin/arm-linux-g++")
set(CMAKE_C_FLAGS"-Wl -rpath=.")

# 指定 find_* 命令的搜索路径模式
# 从不搜索宿主系统路径
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# 只在工具链路径中找库和头文件
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

关键配置说明:

  • TOOLCHAIN_DIR: 硬编码了交叉编译工具链的根目录。在您的环境中,您需要修改此路径,使其指向您自己的工具链位置。
  • CMAKE_C_COMPILER: 明确指定了C编译器为 arm-linux-gcc
  • CMAKE_FIND_ROOT_PATH_MODE_*: 这是交叉编译最关键的设置。它强制CMake只在 TOOLCHAIN_DIR 指定的路径下查找库和头文件,从而避免了将在PC上编译的宿主系统库链接到ARM程序中的问题。

2. 如何进行交叉编译

  1. 确保您已经正确修改了 arm.cmake 文件中的 TOOLCHAIN_DIR 路径。
  2. 在项目根目录下,执行以下命令:
    1
    2
    3
    4
    5
    6
    7
    8
    # 创建构建目录
    mkdir -p build && cd build

    # 运行CMake,并使用-D参数指定工具链文件
    cmake .. -DCMAKE_TOOLCHAIN_FILE=../arm.cmake

    # 开始编译
    make -j$(nproc)
  3. 编译成功后,bin/ 目录下生成的 main 可执行文件就是适用于您的ARM目标平台的程序。