目录
一、内容
二、配置
1. 准备cmake文件
2. 使用交叉编译
三、验证
1. 构建阶段验证
2. 编译阶段验证
一、内容
目的:在X86环境下编译ARM平台软件
-
编写交叉编译配置文件:xx.cmake
-
执行cmake命令时指定:cmake \ -DCMAKE_TOOLCHAIN_FILE=“xx.cmake”
-
编译:make -j8
-
验证:make clear && make VERBOSE=1
二、配置
1. 准备cmake文件
(1)CMAKE官方例子
(2)自己项目例子
以配置一个nvidia orin的交叉编译工具链为例
编写cmake文件 gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake
# 常规配置
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm)# 1. 添加gcc g++编译器目录
# maybe not work, you should export CC and CXX to real compile path
set(CMAKE_C_COMPILER "/l4t/toolchain/bin/aarch64-linux-gcc")
set(CMAKE_CXX_COMPILER "/l4t/toolchain/bin/aarch64-linux-g++")# 2. 设置系统路径,即gcc的--sysroot参数
# --sysroot=<directory> Use <directory> as the root directory for headers
# and libraries.
# 这个目录下有arm平台的系统include目录以及系统lib目录
set(CMAKE_SYSROOT /l4t/toolchain/aarch64-linux-gnu/)# 3. 设置额外的路径
# 例如除了系统库目录,还需要添加额外的目录
# 如果你只需要交叉编译环境的系统路径,就不需要这一步# 3.1 可选:如果有必要,添加额外的头文件查找路径(例如libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libdrm)# 3.2 可选:如果有必要,添加额外的库文件查找路径(例如libabc)
add_link_options(-L/opt/open_explorer/samples/abc/lib)
add_link_options(-L/opt/open_explorer/samples/drm/lib)# 4. 可选:添加其他的CMake编译选项
# 实际上,这个文件可以添加任何CMake语法
# 但是,一般情况这个文件只用于配置必要的交叉编译器和交叉编译系统目录
2. 使用交叉编译
在使用cmake生成项目的时候
通过CMAKE的-DCMAKE_TOOLCHAIN_FILE指定交叉编译工具链的cmake文件
cmake \-DCMAKE_TOOLCHAIN_FILE="./cmake/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake" \-DCMAKE_INSTALL_PREFIX="./output" \-DCMAKE_BUILD_TYPE=Release
三、验证
1. 构建阶段验证
构建开始时CMAKE会打印编译器版本信息
可以看到打印的编译器路径和我们设置的一致
2. 编译阶段验证
构建完成之后
我们使用make VERBOSE=1 打印详细的编译命令
make VERBOSE=1
可以看出打印出来的编译命令中可以设置的sysroot参数
同样也可以看到通过 add_compile_options 添加的 -L 和 add_link_options 添加的链接选项
非科班程序员,日拱一卒
一起学习,一起进步