VSCode和CMake实现C/C++开发

VSCode和CMake实现Ubuntu下C/C++开发总结

目录

  • 0.简介
  • 1.Linux系统介绍
  • 2.开发环境搭建
    • 2.1 编译器,调试器安装
    • 2.2 CMake安装
  • 3.GCC编译器
    • 3.1 编译过程
    • 3.2 g++重要编译参数
  • 4.g++编译实战
    • 4.0 编译前
    • 4.1 直接编译
    • 4.2 生成库文件并编译
    • 4.3 编译后
      • 4.3.1 编译完成后的目录结构
      • 4.3.2 运行可执行文件
  • 5.GDB调试器
    • 5.1 前言:
    • 5.2 GDB主要功能:
    • 5.3 常用调试命令参数
  • 6.IDE-VSCode
    • 6.1 插件
  • 7.CMake
    • 7.1 前言:
    • 7.2 语法
      • 7.2.1 基础语法
      • 7.2.2 重要指令和CMake常用变量
        • 7.2.2.1 重要指令
        • 7.2.2.2 常用变量
      • 7.2.3 CMake编译工程
      • 7.2.4 编译流程
  • 8.实践-使用VSCode进行完整项目开发
  • 附:

0.简介

1.Linux系统介绍

一切皆文件:创建、编辑、保存、关闭、重命名、删除、恢复(文件)

  • mkdir - make directories
    用法1:mkdir 路径 创建目录
    用法2:mkdir -p 路径 一次性创建多层不存在的目录 mkdir -p ~/a/b/c
    用法3:mkdir 路径1 [路径2] [路径3] 一次性创建多个目录 mkdir a b c

  • touch - change file timestamps
    创建新文件
    用法1:touch [路径]
    用法2:touch [路径1] [路径2]


【为什么创建新文件是touch】

  1. touch的作用本来不是创建文件,而是将指定文件的修改时间设置为当前时间。就是假装“碰”(touch)了一下这个文件,假装文件被“修改”了,于是文件的修改时间就是被设置为当前时间。
  2. 这带来了一个副作用,就是当touch一个不存在的文件的时候,它会创建这个文件。然后,由于touch已经可以完成创建文件的功能了,就不再需要一个单独的create了。

  • rm - remove files or directories
    作用:删除文件/目录
    用法1:rm [选项] 需要移除的文件路径
    用法2:rm [选项] 需要移除的目录

  • cp - copy files and directories
    作用:复制文件/文件夹到指定的位置
    用法1:cp [被复制的文件路径] [文件被复制到的路径]
    用法2:cp -r [被复制的文件夹路径] [文件夹被复制到的路径]*

  • mv - move (rename) files
    作用:移动文件到新的位置,或者重命名文件
    用法:mv [需要移动的文件路径] [需要保存的位置路径]

  • man - an interface to the system reference manuals
    作用:包含了Linux中全部命令手册,查看命令使用手册,按 q 退出

  • reboot - reboot the machine
    作用:重启linux系统

  • shutdown - power-off the machine
    作用:关机
    用法:shut -h [时间] shutdown -h now

2.开发环境搭建

2.1 编译器,调试器安装

  • 安装GCC,GDB
sudo apt update
# 通过以下命令安装编译器和调试器
sudo apt install build-essential gdb
  • 安装成功确认
# 以下命令确认每个软件是否安装成功
# 如果成功,则显示版本号
gcc --version
g++ --version
gdb --version

2.2 CMake安装

  • 安装cmake
# 通过以下命令安装编译器和调试器
sudo apt install cmake
  • 安装成功确认
# 确认是否安装成功
# 如果成功,则显示版本号
cmake --version

3.GCC编译器

1.GCC 编译器支持编译 Go、Objective-C,Objective-C ++,Fortran,Ada,D 和 BRIG(HSAIL)等程序;
2.Linux 开发C/C++ 一定要熟悉 GCC
3.VSCode是通过调用GCC编译器来实现C/C++的编译工作的

实际使用中
使用 gcc 指令编译 C 代码
使用 g++指令编译 C++ 代码

3.1 编译过程

预处理-Pre-Processing //.i文件
编译-Compiling // .s文件
汇编-Assembling // .o文件
链接-Linking // bin文件

# -E 选项指示编译器仅对输入文件进行预处理
g++  -E  test.cpp  -o  test.i    //.i文件# -S 编译选项告诉 g++ 在为 C++ 代码产生了汇编语言文件后停止编译
#  g++ 产生的汇编语言文件的缺省扩展名是 .s
g++  -S  test.i  -o   test.s# -c 选项告诉 g++ 仅把源代码编译为机器语言的目标代码
# 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名。
g++  -c  test.s  -o  test.o# -o 编译选项来为将产生的可执行文件用指定的文件名
g++  te

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT改写:论文写作新时代

ChatGPT无限次数:点击直达 ChatGPT改写:论文写作新时代 随着人工智能技术的不断发展,论文写作也进入了新的时代。ChatGPT作为一种强大的自然语言处理模型,在论文写作领域展现出巨大潜力。本文将探讨ChatGPT在论文写作中的应用和影响&#xf…

网络面试相关

GET和POST请求的区别 1、get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据),post请求一般是去提交数据。 2、get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有…

Unity 线程相关知识

线程 线程介绍 通过线程执行函数和直接在主函数中调用函数的区别是:通过直接调用函数时会按照语句顺序逐句执行,必定会完成上一句后再执行下一句,而通过线程执行的函数会从调用开始与主函数同步执行 调用线程的方式 调用无参数函数线程的…

.NET Core中间件管道MAP的作用和使用

在ASP.NET Core中,中间件是构建HTTP请求管道的基本组件。中间件组件负责在ASP.NET Core应用程序中处理请求和响应。中间件可以执行多种任务,例如身份验证、记录、异常处理等。你可以按顺序将多个中间件组件组合在一起,形成一个请求处理管道。…

java读取Excel表格数据

java读取Excel表格数据 环境说明项目结构1.controller层2.service层实现层StudentModel.java类 使用的Maven依赖效果示例一效果示例二文档截图第一页第二页 postman请求说明其他说明 环境说明 jdk1.8,springboot2.5.3 项目结构 1.controller层 package com.exam…

Taro-vue微信小程序用户隐私保护

Taro-vue微信小程序用户隐私保护 一、在 微信公众平台的【设置】- 【服务内容与声明】 ,设置用户隐私保护指引,添加项目需要的接口权限。 【用户隐私保护指引】提交之后,官方会进行审核。审核通过之后,对应的接口权限才会生效。 …

区块链安全应用----压力测试

通过Caliper进行压力测试程序 1.环境配置 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限;操作系统版本需要满足以下要求:Ubuntu > 16.04、CentOS > 7或MacOS > 10.14;部署Caliper的计算机需要安装有以下软件&#xff…

【C语言回顾】函数

前言1. 函数的概念和分类2.库函数3. 自定义函数3.1 自定义函数的简单介绍3.2 自定义函数举例 4. 形参和实参4.1 形参4.2 实参4.3 形参和实参的关系4.3.1 理解4.3.2 举例代码和调试 5. 嵌套函数和链式访问5.1 嵌套函数5.2 链式访问 6. 函数的声明和定义6.1 单个文件6.2 多个文件…

Pandas连接MySQL数据库

pandas是一个强大的Python工具包,能够快速帮助我们做很多数据处理。但是在利用pandas连接数据库时,也会遇到很多问题,在此我总结了一个相对较为简单的连接范式,供大家参考学习。 先上代码: import pandas as pd# 数据…

ChatGPT在遥感领域中的应用

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用,人工智…

中文编程入门(Lua5.4.6中文版)第十三章 Lua 文件操作

在《Lua世界》的冒险旅途中,勇士们时常需要与神秘的文本卷轴打交道。为了更好地掌握这些知识宝藏,Lua I/O库提供了两种强大的探索模式:简单模式和完全模式,助你轻松应对各类文献挑战。 简单模式:初识卷轴 简单模式如…

C# aspose word实现模板方式打印及打印速度慢解决方法

1.引用dll nuget或者网上都有下载的方式。不过都要收费。下载地址:https://files.cnblogs.com/files/rolayblog/Tool.zip?t1713322422&downloadtrue 2.打印模板设计 新建一个doc文档,根据自己的需求画页面。 A、普通文本 在word中需要替换值的地方添…

《2024最新Java面试题及答案(带完整目录)》

获取链接:《2024最新Java面试题及答案(带完整目录)》 更多技术书籍:技术书籍分享,前端、后端、大数据、AI、人工智能... ​ ​ ​ 4.1.9.8. 可重入锁(递归锁) ...........................…

Oracle11.2.0.1,(CVE-2012-1675)漏洞解决方案

1.进入容器停止监听 docker exec -it -u 0 oracle11g bash su - oracle lsnrctl stop listener2.找到监听配置文件位置,修改监听文件 echo $ORACLE_HOMEvi network/admin/listener.ora #在文件底部添加 SECURE_REGISTER_LISTENER (IPC) #启动监听 lsnrctl start …

基于springboot+vue+Mysql的汽车租赁系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

idea运行报错:启动命令过长

JAVA项目,运行的时候报错 Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun老问题了,记录一下 解决办法: 1、Edit Configurations 2、点击Modify options设置,勾选S…

PlistEdit Pro for Mac激活版:强大的Plist文件编辑工具

PlistEdit Pro for Mac是一款专为Mac用户设计的强大Plist文件编辑工具。Plist文件是苹果公司开发的一种XML文件格式,用于存储应用程序的配置信息和数据。这款软件为用户提供了直观、易用的界面,使编辑和管理Plist文件变得轻松简单。 PlistEdit Pro for M…

C++设计模式|创建型 3.抽象工厂模式

在上一篇文章中介绍了工厂模式,每个具体工厂负责生产一个专门的产品,其代码扩展性很好,这篇文章将介绍抽象工厂模式。 1.为什么要使用抽象工厂模式? 既然已经有了“工厂模式”,那为什么还会有抽象工厂模式呢&#xf…

ubuntu常用方法

文本文件的创建: sudo touch ubuntu.txt move clock: sudo chmod 777 ubuntu.txt 安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt install ./google-chrome-stable_current_amd64.deb .sh 文件的安装 例…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(1)——场景故事介绍

生成NPC为交互应用程序创建逼真的人类行为模拟。在这项工作中,我们通过将二十五个NPC放置在一个沙盒环境中(类似于The Sims,模拟人生),展示了生成NPC的能力。用户可以观察和干预NPC的日常计划、分享新闻、建立关系以及…