【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件

2023-05-16

1、工具链安装

  工具链版本如下

C:\Users\Lenovo>cmake -version
cmake version 3.24.2

C:\Users\Lenovo>mingw32-make -v
GNU Make 4.2.1 Built for x86_64-w64-mingw32

  若没有以上工具则进行安装,将bin文件加入到环境变量中,注意:有的交叉编译器在安装时选择自动加入环境变量可能并不会加入,还是需要手动加入环境变量,本章首先介绍MinGW编译器,其环境变量如图中所示,位于D盘bin目录下
在这里插入图片描述  该目录下包含了mingw的一系列工具链
  包括mingw的make文件,mingw32-make(在运行makefile时要使用mingw32-make而不是make)
在这里插入图片描述
  还有mingw的gcc文件,用于编译.c文件生成可执行文件
在这里插入图片描述
  它们的关系是这样的:make用于执行Makefiles,Makefiles中包含了一系列的gcc语句用于编译连接,因此make相当于借助makefiles执行一系列gcc指令的指令。(这里的make代表了一系列的make工具,对于mingw是mingw32-make,对于其他工具可能是其他名字。gcc也同理,这里是x86_64-w64-mingw32-gcc)


  一个小探究,这里发现mingw的bin文件夹下除了x86_64-w64-mingw32-gcc还有一个gcc文件,但当我们在cmd中查看他们各自的版本时发现提示是一样的

C:\Users\Lenovo>gcc -v Using built-in specs. COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=D:/mingw64/bin/…/libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32

C:\Users\Lenovo>x86_64-w64-mingw32-gcc -v Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-gcc
COLLECT_LTO_WRAPPER=D:/mingw64/bin/…/libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32

  应当是都被重定向到了同一个可执行文件


2、安装Vscode插件

C/C++
Cmake
Cmake Tools

在这里插入图片描述

3、CMake介绍

  CMake是一个跨平台的Makefile生成工具
  依赖的文件是CMakeLists.txt,其作用简单归结为:

cmake执行CMakeLists.txt生成Makefiles,然后make执行Makefiles,调用Makefiles中一系列gcc编译生成可执行的目标文件

  在这个过程中,make有不同的工具,gcc也有不同的工具,因此在整个工具链中需要进行配置。例如如果是生成windows可执行文件,Cmake就要配置生成MinGW Makefiles,执行Makefiles要选择mingw32-make,编译器要选择x86_64-w64-mingw32-gcc

4、VScode中CMake的使用

shift+ctrl+P:并输入如下指令
cmake:quick start

为本工程开启CMake tools

然后就会看到cmake tools在vscode中的UI
在这里插入图片描述可以点击这里在这里插入图片描述

来进行配置编译器的选择,比如mingw编译器或者arm交叉编译器

5、操作流程(简易版Cmake,无文件层次)

5.1创建文件夹并在VScode中打开

在这里插入图片描述

  在桌面上新建了一个空文件夹test_hello,并在VScode中打开文件夹

5.2创建文件hello.c

hello.c

#include<stdio.h>
int main(){
    printf("HELLO\n");
    return 0;
}

在这里插入图片描述

5.3创建文件CMakeLists.txt

CMakeLists.txt

#cmake使用#注释
cmake_minimum_required(VERSION 3.0)#指定最低版本,不超过前面查看的当前版本
project(hello_simple)#指定当前项目名称
add_executable(hello hello.c)#指定生成目标、源文件

在这里插入图片描述

5.4配置VScode插件CMakeTools选项

进入用户设置
在这里插入图片描述

选择CMakeTools设置
在这里插入图片描述


可以看到生成文件的默认目录是会在当前文件夹下创建一个build文件夹,生成文件都生成在这个build文件夹中
在这里插入图片描述


此外还有源代码目录选择,这个和build一样,都先默认不设置
在这里插入图片描述




CMake生成器(Generator)配置。
CMake不编译或链接任何源文件,它使用生成器为构建系统创建配置文件。
相当于在终端(cmd或者powershell)中输入cmake -G后面的参数,例如cmake -G “MinGW Makefiles”
在这里插入图片描述
在终端输入

cmake -help

可以看到-G可选参数,其中常见的有这几种。也就是说在上述Cmake:Generator中可选这些生成器,*号表示默认的生成器
在这里插入图片描述

5.5开启CMakeTools的UI并选择编译器

shift+ctrl+P

弹出的窗口输入:

cmake:quick start

在这里插入图片描述


并点击,会弹出来如下选择
在这里插入图片描述第一次使用时推荐第一个,这个会在本机中扫描编译器和交叉编译器(前提是必须先添加到系统环境变量中,详见本章第一节),特别是遇到BC没出现的情况时,点击A后UI会自动启动,然后在窗口底部的这个位置可以点击选择编译器。
在这里插入图片描述这里选择x86_64-w64-mingw32-gcc 构建windows系统的可执行文件,则生成文件是exe格式的。



点击build进行构建,部分输出如下
在这里插入图片描述可以根据提示知道最后成功构建了可执行文件hello.exe(在build文件下)

由此可知,VScode中的CMakeTools可以一步到位完成构建生成,而不是像终端中那样,先构建生成Makefile,然后再用make指令生产最终可执行文件。


这里稍微拓展一下,如果要在终端进行构建的话,如果前面cmake -G参数选的是MinGw Makefiles,那么后面make指令就要选mingw工具链中的make,即mingw64-make(第一节中所介绍的)指令来执行Makefile,这体现了工具链的对应性和一致性


5.6执行生成文件,观察结果

在这里插入图片描述
可以看到,生成文件都在build中,包含了中间文件Makefile,还有目标文件hello.exe等。
直接在终端中cd到build下(输入E: 按下回车可以改变到对应盘符)输入

./hello.exe

结果如下,这里用的是VScode内置powershell
在这里插入图片描述成功输出结果,圆满完成任务!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件 的相关文章

  • c++中nan,inf详解

    nan xff1a not a number 非数字 注意事项 xff1a 对负数开方sqrt 1 0 对负数求对数 log 1 0 0 0 0 0 0 0 inf inf inf inf inf这些操作都会得到nan 0 0会产生操作异常
  • 经纬度的多种格式和转换方式

    格式 方式格式单位用途 注意事项度 d dd ddddddd度百度地图和google地图度 分 d ddmm mmmmmmdd单位是度 xff0c mm mmmmmm单位是分GPGGA度 分 秒 d ddmmss ssdd单位是度 xff0
  • 【Apollo】supervisor组件的应用

    Supervisor 一个client server系统 xff0c 用来控制一系列进程在UNIX like操作系统上 supervisord server xff1a 响应client端的命令 xff0c 控制进程启动 xff0c 停止
  • ubuntu 无登录界面,内核出错

    内核错误的原因 pc出现没有正常关机而直接下电 破坏内核文件 就有可能造成内核错误 在升级内核时 强制pc下电 也有可能造成内核错误 问题现象 显示ubuntu背景偏彩色的图片 但不会弹出登录窗口 解决方式 重新上电按下ESC 进入ubun
  • rplidar ros sdk 无原因挂死情况分析解决

    今天在rplidar sdk上遇到个问题 怀疑以前也遇到过 这里记录一下 问题环境 rplidar A3 43 ubuntu16 04 问题现象 运行rplidar sdk 无原因程序死掉 无错误日志 问题定位及解决 想查看core的堆栈信
  • 使用wget命令https资源下载不下来的解决办法

    使用wget命令下载https资源但是下载不下来 xff0c 这是可以将wget https xxxxx 修改为 wget http xxxxx 如果liunx网络不稳定 xff0c 可能会出现断了的情况 xff0c 可以开启断点续传的功能
  • (无人机方向)ros小白学习之路(四)ROS通信机制---服务通信

    文章目录 前言ROS服务通讯定义应用场景实现0 Server注册1 Client注册2 ROS Master实现信息匹配3 Client发送请求4 Server发送响应 服务通信自定义srv创建功能包 然后创建srv文件夹 再创建Addin
  • 修改双系统(win10+ubuntu)启动顺序和启动时间

    安装了ubuntu16 04后 xff0c GNU GRUB引导的默认启动项是ubuntu xff0c 如果希望默认启动项是windows xff0c 修改方法如下 xff1a step1 进入Ubuntu系统 xff0c 打开终端 xff
  • 虚拟帧缓冲驱动

    17 2 2 虚拟帧缓冲驱动 嵌入式Linux系统开发全程解析 是一本全面介绍嵌入式Linux开发的专著 xff0c 书中涵盖了程序生成工具 调试工具 引导加载器 Linux系统结构 Linux内核 驱动程序 用户空间编程 用户空间中间件等
  • 神经网络每次输出不一样,神经网络输出值相同

    BP神经网络最后得出的误差很大 1 看看是不是训练效果好 xff0c 预测效果不好 如果是这样那就是过拟合 网上搜搜有很多解决过拟合的方法 2 如果训练和预测都不好 xff0c 那就是模型有问题 可能原因是 xff08 1 xff09 数据
  • 深度神经网络应用实例

    深度神经网络目前有哪些成功的应用 深度学习最成功的应用是在音视频的识别上 xff0c 几乎所有的商用语音识别都是深度学习来完成的 其次深度学习应用最成功的领域就是图像识别 xff0c 目前识别准确率已经超越人类 深度学习成了图像识别的标配
  • 研究pixhawk的makefile的结构(-)

    首先研究 xff50 xff49 xff58 xff48 xff41 xff57 xff4b 的 xff4d xff41 xff4b xff45 xff46 xff49 xff4c xff45 的结构是怎样的 方便以后开发测试 xff11
  • 制作ROS移动机器人地盘

    制作ROS移动机器人地盘 摘要概述硬件需求车体设计电路设计程序设计PID控制轮速 摘要 本教程讲述如何利用扫地机轮子制作ROS移动机器人地盘 概述 原本不打算自己造轮子的 xff0c 但是网上的移动机器人地盘要么巨贵 对于学生党 xff0c
  • Lumia520刷安卓教程

    Date 2017 09 02 Author SuperDeveloper Descreption install android on luima 520 devices Email na1206 64 live com 警告 本教程只适
  • openwrt编译及第一个安装包教程

    Date 2017 03 14 Made SuperDeverloper Email na1206 64 live com Target For mt7688 based board 说明 xff1a 本人在学习过程中走了不少弯路 xff0
  • turtlebot3 Slam+nvigation仿真 ROS-lunar

    Date 2017 09 06 Author SuperDeveloper Description Slam simulation 说明 xff1a 1 Slam 初学笔记 xff0c 搭建slam仿真环境 xff1b 2 文章里的连接可能
  • 基于NVIDIA Xavier NX(ubuntu20.04)的Optitrack视觉定位 PX4+ros noetic(实物运行记录)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 xff1a 硬件准备两种界面化显示的方式无线连接有线连接 二 xff1a 软件准备1 远程登录软件 NoMachine2
  • ros机器人搭建总纲

    author xff1a superDeveloper date 2017 11 29 type note 近期准备搭建一个ROS机器人平台 xff0c 建立此博客记录搭建过程以及相关问题的解决办法 xff0c 作为笔记 xff0c 亦供相
  • ros gmapping 运行错误:Assertion 'beams<LASER_MAXBEAMS' failed>

    在使用真实激光器发布数据的时候 xff0c 出现了 Laser is mounted upward警告 xff0c 以及slam gmapping tmp buildd ros hydro openslam gmapping 0 1 0 2
  • realloc():invalid next size....错误

    Author SuperDeveloper Date 2018 1 2 在程序中使用了realloc函数 xff0c 更改结构体数组的大小 xff0c 错误代码如下 xff1a struct point span class hljs su

随机推荐

  • git简单命令笔记

    这是一篇关于git的使用笔记 xff0c 刚刚开始使用git 1 创建git本地仓库 xff1a 在你需要版本控制的项目Project根目录下右键点击Git Bash here执行git init 然后在该目录下生成 一个 git的隐藏文件
  • 源码编译Boost库的正确姿态

    源码编译Boost库的正确姿态 写在前面step 1 step 2 step 3 step4 写在前面 项目需要编译pcl库到arm平台 xff0c 交叉编译Boost xff0c Eigen3 Flann 之后再编译pcl库的时候总是报错
  • 第一讲、四旋翼的整体控制方案

    各位朋友 xff0c 我们工作室以后会长期更新一些飞行器干货 xff0c 本部分先介绍四旋翼的整体控制方案及相关设计 控制系统的框架如下 xff0c 借鉴网上来源图片 xff0c 传感器主要是姿态传感器 xff0c 对于大四轴而言 xff0
  • 网页中屏蔽鼠标右键、Ctrl+N、Shift+F10

    lt script language 61 34 Javascript 34 gt 屏蔽鼠标右键 Ctrl 43 N Shift 43 F10 F5刷新 退格键 屏蔽F1帮助 function window onhelp return fa
  • asp.net上一页下一页的部分代码

    lt asp linkbutton id 61 34 btnFirst 34 nclick 61 34 PagerButtonClick 34 runat 61 34 server 34 CommandArgument 61 34 0 34
  • Visual C# 编程操作Excel

    Visual C 编程操作Excel 2004 08 20 作者 xff1a 邵回祖 出处 xff1a ahcit http www yesky com SoftChannel 72342380468109312 20040819 1844
  • C#保存图片到IMAGE字段

    byte FileByteArray System IO MemoryStream ImageStream this sqlConnection1 ConnectionString 61 strConn try if this sqlCon
  • Android-蓝牙sco通话

    APP调用AudioManager startBluetoothSco frameworks base media java android media AudioManager java public void startBluetoot
  • Docker启动时的报错汇总

    八个Docker常见故障 https mp weixin qq com s 2GNKmRJtBGHhUyVBRbRgeA 八个Docker常见故障 报错一 xff1a error initializing graphdriver Docke
  • 利用JAVA操作EXCEL文件

    利用JAVA操作EXCEL文件 转载自 xff1a www csdn net 2003 年 1 月 在开源世界中 xff0c 有两套比较有影响的API可供使用 xff0c 一个是POI xff0c 一个是jExcelAPI 其中jExcel
  • 网站不能更新,错误 '80004005'

    网站数据转移到了另一台服务器 后台数据不能更新 因为程序原因也无错误信息报出 数据库为ACCESS数据库 初步估计是不是数据库只读或是NTFS的权限问题 对数据库目录添加EVERYONE和IIS的来宾帐户写入和修改权限 还是不能更新数据 最
  • vb6实现程序延时的几种方法

    VB6在开发发贴机时 提交数据要用到延时程序 让程延时和等待 从网上找了三种方法 三种方法以最后一种最好用 第一种如果不DOEVENTS的话 会使人感觉程序无反应一样 有以下方法 xff1a 1 使用Windows API函数Sleep 新
  • 初识SEO,SEO学习笔记一

    SEO 是一种方法 更是一种思想 如果只是为了关键字 那他就只是一种工具 一种方法 工具和方法总有过时的时候 而思想 则可以通达 可以明朗 可以提升层次 应当明的有关SEO的几个概念 目标关键词和长尾关词 一直以来 对这个概念都是只能意会
  • 【信号分析与处理】Matlab运算带有冲激函数的积分

    syms t span class token punctuation span span class token comment 定义变量 span span class token keyword int span span class
  • 【计算方法】Python二分法求解方程

    span class token comment 二分法求方程零点 span span class token keyword from span math span class token keyword import span span
  • 【信号分析与处理】-离散信号分析-MATLAB stem函数的使用

    1 stem xff08 y xff09 1 1如果y是向量 xff0c 则从1开始每隔单位长度描点 行向量列向量描点效果相同 e g x 61 1 2 3 4 3 3 2 1 5 stem x 1 2如果y是一个n m矩阵 xff0c 则
  • 基于Shape From Shading(SFS)原理的侧扫声呐海底三维重建项目进度记录

    quad 本文主要用于记录 海底三维重建算法研究 课题毕业设计的进度与内容概括 quad 2021 12 24
  • 【基于侧扫声呐和SFS方法的地形三维重构】(一)增益补偿和斜距校正

    本文主要参考文献如下 1 王杰英 侧扫声呐图像的三维重构 D 浙江大学 2018 qquad 这里先向学长表示感谢 xff01 本文主要讲述了侧扫声呐原始图像需要进行的一些信号处理与图像处理步骤 增益补偿与斜距校正 xff0c 其他处理步骤
  • git教程

    git本地操作 创建文件不丢失记录历史随时回退自动合并 xff0c 但也需要手动合并拥有强大的 分支 分布式 svn xff08 集中式 xff09 需要一台中央服务器git xff08 分布式 xff09 每人都有完成的版本git速度快一
  • 【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件

    1 工具链安装 工具链版本如下 C Users Lenovo gt cmake version cmake version 3 24 2 C Users Lenovo gt mingw32 make v GNU Make 4 2 1 Bui