01
交叉编译概念
什么是交叉编译 · 为什么需要 · 宿主机与目标机的关系
基础概念
02
工具链基础
工具链组成 · 命名规则 · 编译器/链接器/汇编器/库
工具链命名
03
CMake入门
CMake简介 · CMakeLists.txt语法 · project()与add_executable()
CMake语法
04
CMake变量与缓存
set()命令 · 缓存变量 · CMAKE_C_COMPILER等预设变量
变量缓存
05
第一个交叉编译项目
命令行指定编译器 · 交叉编译Hello World
实战入门
06
工具链文件概念
什么是工具链文件 · 为什么推荐使用而非命令行参数
工具链文件最佳实践
07
编写第一个工具链文件
set()设置CMAKE_SYSTEM_NAME · CMAKE_C_COMPILER等核心变量
编写核心变量
08
系统名称与处理器
CMAKE_SYSTEM_NAME详解 · Linux/Generic/Android · CMAKE_SYSTEM_PROCESSOR
系统处理器
09
查找工具链程序
find_program() · CMAKE_FIND_ROOT_PATH · 交叉编译查找模式
查找路径
10
Sysroot概念
什么是sysroot · CMAKE_SYSROOT变量 · 指定系统根目录
sysroot根目录
11
库搜索路径
CMAKE_FIND_ROOT_PATH_MODE_LIBRARY · MODE_INCLUDE · MODE_PROGRAM
搜索模式
12
编译选项控制
CMAKE_C_FLAGS · CMAKE_CXX_FLAGS · 目标架构优化选项
编译优化
13
链接选项控制
CMAKE_EXE_LINKER_FLAGS · CMAKE_SHARED_LINKER_FLAGS · 静态/动态链接
链接标志
14
多架构支持
32位/64位 · 硬浮点/软浮点 · 同一工具链文件处理
多架构浮点
15
工具链文件中的条件判断
if() · elseif() · 根据目标架构设置不同参数
条件逻辑
16
使用CMake预设
CMakePresets.json · 工具链文件结合 · 构建类型配置
预设配置
17
第三方库交叉编译
find_package() · 交叉编译环境中查找库 · 设置库路径
第三方库
18
FetchContent与交叉编译
FetchContent下载并交叉编译第三方源码
FetchContent下载
19
ExternalProject与交叉编译
ExternalProject_Add管理外部项目交叉编译
ExternalProject管理
20
测试交叉编译结果
enable_testing() · add_test() · 目标机上运行测试
测试CTest
21
调试工具链问题
常见错误 · 找不到编译器 · 链接错误 · 库路径错误
调试排错
22
CMake调试技巧
--debug-output · --trace · 调试配置过程
调试跟踪
23
ARM交叉编译实战
ARM Cortex-A系列 · 完整工具链文件
ARM实战
24
RISC-V交叉编译实战
RISC-V 64位 · 工具链文件 · 编译示例
RISC-V64位
25
MIPS交叉编译实战
MIPS32 · 大小端 · ABI问题处理
MIPS大小端
26
Android NDK交叉编译
CMake与Android NDK · CMAKE_TOOLCHAIN_FILE · NDK内置文件
AndroidNDK
27
嵌入式Linux系统构建
Buildroot/Yocto工具链 · CMake集成
嵌入式Buildroot
28
Windows交叉编译Linux程序
MinGW/Cygwin · CMAKE_SYSTEM_NAME=Linux
WindowsMinGW
29
macOS交叉编译
iOS/tvOS/watchOS · Xcode工具链
macOSiOS
30
综合实战
从零搭建完整交叉编译项目 · 工具链文件+CMakeLists.txt+构建脚本
综合项目