linux下使用vscode和cmake高效管理c++项目简明教程

news2024/9/30 17:24:37

  安装vscode及c++环境配置可以参见:https://blog.csdn.net/fangshuo_light/article/details/123635576
  首先,创建工程目录,并在vscode中打开该文件夹,在里面创建如下文件夹:

  • include:用于存放.h文件
  • src:用于存放.cpp文件
  • build:cmake生成文件的存放路径
  • CMakeLists.txt:cmake配置文件

  创建完成目录如下图所示:
在这里插入图片描述

  然后,我们创建一个名为comp的文件,里面声明并定义了一个计算输入数据x的平方的函数compute;然后我们在main里面调用这个方法。那么,实现这个功能的目录结构以及各个文件的内容如下:

  • 目录结构:
    在这里插入图片描述
  • CMakeLists.txt内容:
cmake_minimum_required(VERSION 3.16)                # 说明要求的最低cmake版本,可不需要这行,但是每次cmake后会有warning,所以还是加上
project(MOTION_AVERAGING)                           # 指定工程名,可以自己随便取,不重要
set(SRC_LIST src/main.cpp src/comp.cpp)             # 设置变量SRC_LIST。内容为src/main.cpp src/comp.cpp,用于后面添加src文件
set(CMAKE_BUILD_TYPE Debug)                         # 设置编译类型,可以是Debug,也可以是Relase
include_directories(${CMAKE_SOURCE_DIR}/include)    # 添加头文件搜索路径,${CMAKE_SOURCE_DIR}指代当前cmake文件的路径,这样写后在include自己编写的头文件时就不用再加前缀include了
add_executable(ma ${SRC_LIST})                      # 指定生成的可执行文件名,以及需要编译的所有cpp文件,也就是上面定义的SRC_LIST变量内容,如果添加新的文件,则修改上面变量指代的内容即可
  • comp.h内容:
int compute(int x);
  • comp.cpp内容:
# include <iostream>
# include "comp.h"
using namespace std;

int compute(int x){
    return x*x;
}
  • main.cpp内容:
# include <iostream>
# include "comp.h"
using namespace std;

int main (int argc, char **argv){
    int x=2;
    int x2 = compute(x);
    cout << "The square of " << x << " is " << x2 << endl;
    return 0;
}

  一开始build目录下是没有东西的,然后我们cd到build目录下,在终端执行编译命令:

$ cmake ..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/motionaveraging/build

$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/motionaveraging/build
Scanning dependencies of target ma
[ 33%] Building CXX object CMakeFiles/ma.dir/src/main.cpp.o
[ 66%] Building CXX object CMakeFiles/ma.dir/src/comp.cpp.o
[100%] Linking CXX executable ma
[100%] Built target ma

  执行完上述两个命令后,我们就可以在build目录下看到生成了如下内容:
在这里插入图片描述
  其中的ma也就是我们指定的生成可执行文件名,其他的文件不需要管。然后,要获得输出结果,只需要在终端执行该可执行文件即可:

$ ./ma
The square of 2 is 4

  看到该输出内容,则表明我们的工程成功搭建,一切执行正常。

  在这样的管理下,我们逐步扩大和搭建工程,就会变得很有条理。比如要创建新的.h和.cpp文件readfile,专门用于读取文件数据,则要将其添加到工程中,只需将CMakeLists.txt修改为:

cmake_minimum_required(VERSION 3.16)               
project(MOTION_AVERAGING)                        
set(SRC_LIST src/main.cpp src/comp.cpp src/readfile.cpp)            
set(CMAKE_BUILD_TYPE Debug)                                        
include_directories(${CMAKE_SOURCE_DIR}/include)               
add_executable(ma ${SRC_LIST})

  其实只是将readfile.cpp添加到SRC_LIST变量里就行了,然后再cmake和make即可。但是这样的话,每次修改完代码还需要自己手动cmake一下,很麻烦。不过我们可以通过在vscode里设置task.json文件,来实现自动化的cmake,可以参考:
linux下使用vscode进行c++项目开发,CMakeLists.txt、launch.json、tasks.json联合配置需要注意的地方
ubuntu下使用vscode对c++程序进行自动化调试(设置task.json)
ubuntu下使用vscode对c++程序进行调试的详细图文教程(设置launch.json)

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

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

相关文章

HBase 一文读懂

本文基于《尚硅谷大数据技术之HBase》编写。HBase 简介HBase定义HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。HBase数据模型HBase的数据模型同关系型数据库&#xff08;RDMS&#xff09;很类似&#xff0c;数据存储在一张表中&#xff0c;有行有列。但从HBase的…

c语言tips-大端小端存储介绍和使用union判断大小端

1. 大小端介绍 大端&#xff08;Big Endian&#xff09;和小端&#xff08;Little Endian&#xff09;是两种CPU或者计算机系统存储数据的方式。 在大端系统中&#xff0c;数据的高位字节&#xff08;MSB&#xff09;存储在内存地址的低位&#xff0c;低位字节&#xff08;LSB…

Linux系统下搭建maven环境

文章目录前述从官网下载安装包安装 maven修改maven配置修改环境变量测试前述 安装 maven 环境前&#xff0c;需要先安装 java 环境&#xff0c;如果没有安装 java 环境&#xff0c;可以参考&#xff1a;https://blog.csdn.net/weixin_45583303/article/details/118631855 从官…

maven的仓库配置、指定jdk编译版本、相关编译命令简介、scope依赖的范围以及依赖的传递性

目录 1、配置阿里云提供的镜像仓库 2、指定jdk编译版本 3、执行 Maven 的构建命令 3.1、清理操作 3.2、编译操作 3.3、测试操作 3.4、打包操作 3.5、安装操作 4、scope依赖的范围 5、依赖的传递性 5.1、概念 5.2、传递的原则 1、配置阿里云提供的镜像仓库 将下面 m…

C++STL之list的模拟实现

目录 一.list准备 二. iterator迭代器 1._list_iterator 2.begin()、end() 3.const_begin()、const_end() 4.!&& 5. && -- 6.operator* 7.operator-> 三.Modify(修改) 1.insert() 2.erase() 3.push_back() && push_front() 4.pop_bac…

MySql触发器学习

文章目录1 触发器1.1介绍1.2 创建触发器1.2 删除触发器1.3查看触发器1 触发器 1.1介绍 触发器是与表有关的数据库对象&#xff0c;指在 insert/update/delete 之前或之后&#xff0c;触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的…

(十八)操作系统-进程互斥的软件实现方法

文章目录一、知识总览二、单标志法三、双标志先检查法四、双标志后检查法五、Peterson算法六、总结一、知识总览 二、单标志法 算法思想&#xff1a;两个进程在访问临界区后&#xff0c;会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进…

Guna Charts WinForm 1.0.8 Crack

Guna Charts 16 图表 在 16 种不同的图表类型中可视化您的数据。 Guna Charts 反应灵敏 轻松响应屏幕尺寸的变化。 Guna Charts 实时图表 创建实时数据仪表板现在非常容易。 Guna Charts 混合图表类型 混合多种图表类型&#xff0c;例如条形图和折线图/面积图。 Guna Charts…

MS9122是一款USB单芯片投屏器,内部集成了USB2 0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示

MS9122是一款USB单芯片投屏器&#xff0c;内部集成了USB2.0 控制器和数据收发模块、HDMI 数据接口和音视频处理模块。MS9122可以通过USB接口显示或者扩展PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备&#xff0c;支持HDMI视频接口。 主要功能特征 HDMI v1.4兼容 最大…

【java基础】包装类,自动装箱和自动拆箱

文章目录基本介绍包装类自动装箱自动拆箱包装类注意事项包装类比较包装器内容不可变基本介绍 有时&#xff0c;需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。 例如&#xff0c;Integer类对应基本类型int。通常&#xff0c;这些类称为包装器&#…

网上这么多IT的培训机构,我们该怎么选?

说实话&#xff0c;千万不要把这个答案放在网上来找&#xff0c;因为你只能得到别人觉得合适的或者机构的广告&#xff1b;当然个人的培训经历可以听一听的&#xff0c;毕竟不靠谱的机构也有&#xff0c;比如让你交一两万去上线上课程或者一百号来人坐一起看视频&#xff0c;这…

【django】django-simpleui配置后,后台显示空白页解决方法

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 django后台显示空白页解决方法 1. 正文 添加完simpleui以后&#xff0c;后台显示一片空白&#xff0c;一脸问号&#xff1f;&#xff1f;&#xff1f; …

MacBook Pro 休眠后五国,自动重启报错

看了网上很多情况&#xff0c;都说是系统的原因&#xff0c;2018年款的Mac已经过了保修期去过天才吧说花4k 换主板解决&#xff0c;花个几千块去解决这个问题不如折旧加钱再买个新的总之先用应急的办法1.电池偏好设置&#xff0c;接通电源时勾选“ 当显示器关闭时&#xff0c;防…

类的加载过程(生命周期)

类的加载过程(生命周期) 一、装载&#xff1a;通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象&#xff08;将字节码加载到内存中&#xff09;&#xff0c;作为…

扫地机器人(蓝桥杯C/C++)

题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 NN 个方格区域组成&#xff0c;如下图所示。 走廊内部署了 KK 台扫地机器人&#xff0c;其中第 ii 台在第 A_iAi​ 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中&#xff0c;并将该区域清扫干净。…

DevOps落地与转型:提升研发效能的方法与实践

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…

使用 OpenCV 将图像转换为铅笔素描的 8 个步骤

使用 OpenCV 从彩色图像创建铅笔素描图像这个项目是我为 LetsGrowMore 的数据科学实习生创建的任务。LetsGrowMore &#xff1a;https://letsgrowmore.in/vip/目录什么是 OpenCV&#xff1f;第 1 步&#xff1a;读取图像第 2 步&#xff1a;将图像转换为灰度第 3 步&#xff1a…

MarkDown中写UML图的方法

目录序UML图之顺序图顺序图的四个要素关于消息箭头的语法Mermaid中顺序图的简单例子样例用小人表示对象为对象设置别名激活对象UML图之类图类图中常见的关系关于不同类型关系的语法Mermaid中类图的简单例子样例类定义的两种方式为类定义成员双向关系的表示多重性关系的表示UML之…

毕业设计 基于51单片机的手机蓝牙控制8位LED灯亮灭设计

基于51单片机的手机蓝牙控制8位LED灯亮灭设计1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STC89C52单片机核心系统电路设计2.2 LED电路设计2.3 蓝牙模块电路设计3、部分代码展示3.1 定时器初始化以及中断处理3.2 串口初始化3.3 串口中断处理1、项目简介 选题指导&…

微信授权登录流程以及公众号配置方法(golang后端)

一、准备一个已经认证OK的微信公众号和已经备案的域名&#xff0c;且解析好配置好https证书。 1.如上图 微信公众号 > 基本配置 &#xff0c;设置开发者密码 2.设置IP白名单&#xff0c;白名单填写提供后端服务的服务器公网IP 二、公众号服务器配置。 1.找到基本配置 2.将服…