基于cmake的交叉编译工具链

基于cmake的交叉编译工具链

一、基本概念 1. 什么是交叉编译

交叉编译是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。

2. 什么是宿主机和目标机

宿主机(host)是指使用交叉编译工具链执行编译的主机,一般配置较高,如PC主机;目标机(target)是指运行交叉编译出的可执行程序的机器,一般资源有限,如嵌入式开发板。

3. 什么是工具链

工具链一般是由编译器、连接器、解释器和调试器组成,同时也包括目标机器的头文件、库文件等编译资源。

4. cmake 工具链变量

 

二、编译流程

基于cmake的交叉编译工具链

 

 

三、编译方法 1. cmake 命令行编译

 基于cmake的交叉编译工具链

 

 

命令

# 通过 CMAKE_TOOLCHIAIN_FILE 指定交叉编译工具链文件
cmake -D CMAKE_TOOLCHIAIN_FILE="/path/to/my-cmake-toolchain-file.cmake" ..

 

交叉编译工具链文件为一个后缀为.cmake文件的cmake文件。

2. cmake-gui 图形界面编译

此处待完善...

四、cmake 工具链变量详解 1. 目标系统变量

CMAKE_SYSTEM_NAME 目标机所在操作系统名称

目标机所在操作系统名称

不同系统取值:Linux、Android、QNX、WindowsCE、WindowsPhone、WindowsStore(Windows10 or Windows Store)

CMAKE_SYSTEM_PROCESSOR

目标系统的硬件或CPU架构

不同CPU架构取值:arm(ARM)、x86(X86)

2. 交叉编译器

CMAKE_C_COMPILER

目标系统的C语言编译器

这里可以将变量设置成完整路径或者文件名

CMAKE_CXX_COMPILER

目标系统的C++语言编译器

这里可以将变量设置成完整路径或者文件名

3. 外部依赖库

CMAKE_FIND_ROOT_PATH

代表了目标板使用的一系列相关文件夹路径的根路径

CMAKE_FIND_ROOT_PATH_MODE_XXX 均在此根路径及其子目录下查找

CMAKE_FIND_ROOT_PATH_MODE_PROGRAM

指定交叉编译时可执行程序的搜索模式

一般取值 NEVER 或 ONLY

CMAKE_FIND_ROOT_PATH_MODE_INCLUDE

指定交叉编译时头文件的搜索模式

一般取值 ONLY

CMAKE_FIND_ROOT_PATH_MODE_LIBRARY

指定交叉编译时库文件的搜索模式

一般取值 ONLY

CMAKE_FIND_ROOT_PATH_MODE_PACKAGE

指定交叉编译时开发包的搜索模式

一般取值 ONLY

交叉编译搜索模式

NEVER 表示不在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找

ONLY 表示仅在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找

BOTH 表示先在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找再查找全局路径

五、应用场景 1. 官方示例

# Linux 交叉编译工具链文件
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
set(CMAKE_STAGING_PREFIX /home/devel/stage)

set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

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)

2、简单示例

文件结构

 

文件内容

toolchain.cmake

CMakeLists.txt

main.cpp

 

 

编译方法

命令行编译

图形界面编译

 

六、参考链接

交叉工具链

CMake交叉编译

CMAKE_SYSTEM_NAME 取值

原文链接: https://www.cnblogs.com/alix-1988/p/12173367.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    基于cmake的交叉编译工具链

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/401084

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月17日 上午9:38
下一篇 2023年4月19日 上午9:07

相关推荐