基于cmake的交叉编译工具链

article/2025/9/18 18:34:09

基于cmake的交叉编译工具链

本文转载自:https://segmentfault.com/a/1190000019276315,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

一、基本概念

1. 什么是交叉编译

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

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

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

3. 什么是工具链

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

4. cmake 工具链变量

图片描述

二、编译流程

图片描述

三、编译方法

1. cmake 命令行编译

  • 命令

    # 通过 CMAKE_TOOLCHAIN_FILE 指定交叉编译工具链文件
    cmake -D CMAKE_TOOLCHAIN_FILE="/path/to/my-cmake-toolchain-file.cmake" ..
  • 交叉编译工具链文件为一个后缀为.cmake文件的cmake文件。

2. cmake-gui 图形界面编译

  • cmake-gui 界面
    clipboard.png

四、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

  • 指定交叉编译时可执行程序的搜索模式
  • 一般取值 BOTH

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 BOTH)
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、简单示例

  • 文件结构
    clipboard.png
  • 文件内容

    • toolchain.cmake
      clipboard.png
    • CMakeLists.txt
      clipboard.png
    • main.cpp
      clipboard.png
  • 编译方法

    • 命令行编译
      clipboard.png
    • 图形界面编译
      clipboard.png
      clipboard.png
      clipboard.png
      clipboard.png
      clipboard.png

六、参考链接

  • 交叉工具链
  • CMake交叉编译
  • CMAKE_SYSTEM_NAME 取值

http://chatgpt.dhexx.cn/article/acb6DBDt.shtml

相关文章

交叉编译工具链建立与常识

交叉编译工具链的命名规则 arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel; vendor – 工具链提供商,可能有的工具链会省去这个字段,…

交叉编译工具链的安装和配置过程

1. 编译工具链基本介绍 C/C程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。 gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:g…

编译工具链和交叉编译工具链简易说明

文章目录 编译工具链交叉编译工具链 编译工具链 做C/C开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容。 C/C的程序需要经过 gcc 等编译成二进制程序才能被计算机使用,这里的 gcc 通常是泛指,包括 gcc 、 g 、ar 、as 、ld 等一系…

Linux vim分屏,如何切换窗口

1.使用 :vsp 2.若想切换窗口,从左边切换到右边,crtlw 点击两次

alt tab无法切换窗口

alt tab无法切换窗口 1. 在桌面新建 a.txt 文件 2. 在文件中输入下面内容 REGEDIT4 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer] "AltTabSettings"dword:000000013. 将文件改为 a.reg 4. 双击文件, 点击所有确定/是 5.重启电脑

Win7系统怎么改变Alt+Tab切换窗口数量,改变Alt+Tab切换窗口数量的方法

我们在使用Win7电脑办公的时候,常常会需要用到切换窗口的快捷键AltTab,这样可以快速切换不同的程序界面,提高工作效率,但是AltTab切换窗口的数量是固定的,不过我们可以改变这个数量,下面小编给大家介绍Win7…

win10系统使用快捷键无法切换窗口怎么办

但是最近,有win1064位系统用户在使用快捷键切换窗口时发现切换不了,那么碰到win10系统使用快捷键无法切换窗口怎么办呢?今天就为大家介绍win10系统使用快捷键无法切换窗口的解决方法。 快捷键无法切换窗口 1、点击开始菜单,选择运行&#…

Linux中如何上下左右切换窗口

linux中如何上下左右切换窗口 ##第一步 将图中show miniature view勾选中,此时窗口会变成最小显示窗口,此时窗口就可以通过ctrlAlt方向键,进行上下左右切换。 ##第二步 将第一步勾选的show miniature view去掉,此时窗口变得正常&a…

win10 edge切换窗口,取消edge窗口为多个,改为独立窗口

win10系统 edge切屏问题 问题情况 edge切屏的时候会显示edge其他的窗口界面,而不是所有的edge十一个窗口的显示情况 解决方法 第一步 找到设置 第二步 搜索多窗口 点击第一个多任务设置 第三步,找到alttab选项 如下图所示 第四步&#x…

点任务栏不切换窗口_如何使您的任务栏按钮始终切换到最后一个活动窗口

点任务栏不切换窗口 Since Windows 7, apps with multiple open windows are combined into a single taskbar button. Hovering over the button gives you a live thumbnail of every window and you can then click the window you want to work with. 从Windows 7开始,具有…

打开计算机窗口的快捷键是什么,快速切换窗口的快捷键是什么

快速切换窗口的快捷键是什么 使用快捷键能让我们更加快捷地操作电脑,那么快速切换窗口的快捷键是什么呢?下面小编带着大家一起来了解一下吧! 快速切换窗口的快捷键 方法一、AltTab快捷键切换窗口 在使用AltTab快捷键切换窗口时,在…

Win32API编程_切换窗口

所需findwindow, SwitchToThisWindow findwindow 函数原型: FindWindow, LPCTSTR lpClassName, // 窗口类名 LPCTSTR lpWindowName // 窗口名 ); 返回值: 返回获取到的窗口句柄 SwitchToThisWindow 函数原型: VOID Switc…

win7中常用切换窗口4种快捷键使用

平常在使用系统中,我们经常会通过一些快捷键来切换窗口,小编在这里给大家总结下,有哪些切换窗口的快捷键可以用。   1、AitTab这个是大家都知道的切换的快捷方式,按照你使用的顺序切换。   2、WinTab效果更佳,有3D…

如何从官网下载JDK安装包?

下载JDK的安装包。 根据自己的服务器类型,下载相应的jdk版本。这里以linux64位为例介绍,下载的是jdk1.8版本。 步骤:(1)进oracle官网,点击进入Java。 (2)进入以后,找到…

java-jdk下载及安装

1、下载JDK; a、直接官网下载:http://www.oracle.com/; b、或百度网盘: 2、双击安装程序, 一直点下一步就好 3、程序安装完毕后,进行环境变量的配置 Java程序开发会使用JDK的两个命令:javac.e…

【java基础】java的官网和jdk安装和下载

本篇文章主要讲解java初级知识,java的jdk安装和下载。 作者:任聪聪 java 官网介绍 java只有一个唯一官网,下载jdk千万不要通过资源站下载,很有可能会存在隐患。 官网地址:https://www.oracle.com/java/ 切换中文显示的…

JDK的最新版的下载与安装

JDK的最新版的下载与安装 一、JDK概述 JDK全称Java Development ToolKit,是Java语言开发工具包。是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),Java基础的类库和很多java工具。 它不提供具体的开发…

JDK 1.8 官网下载地址(linux / windows)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 JDK 1.8 官网下载地址: JDK 1.8 官网下载地址(linuxwindows) 上面连接可以直接点击,连接…

jdk1.7 64位官方下载地址

jdk1.7 64位官方下载地址 平时要新装一个系统环境,或者下载最新的jdk,就需要到oracle官网去下载一个jdk,而目前生产环境都是1.7的环境下开发完成的,需要下载1.7版本的jdk,oracle官方网站的默认下载页面是1.8版本的。面…

如何通过官网下载JDK 每一步详细附图

1.百度搜索oracle(因为jdk是oracle旗下的,所以去找oracle官网) 2.点击带官方字样的链接进入官网,如下 3.点击顶部导航栏的Developer如下,再点击Developer Resource Center(开发人员资源中心,专门供开发人员…