VSCODE+cmake配置C++开发环境的实现步骤
作者:ha_____ha 发布时间:2023-05-31 21:25:14
1.引言
在实习期间,感受到在vs code上编程的优势(实习期间主要写的lua脚本),因此想把C++和python的开发也迁移到vs code上。如果只运行一个简单的.cpp文件,那么使用万能的Code Runner插件就可以完成编译等任务。但是,一般的C++开发中,不可能只有一个.cpp文件,还会自定义头文件和相应的源文件,此时Code Runner就无法满足我们的要求。对于编译多个C++源文件,我网上查到的资料主要有两种方法:
(1)配置tasks.json文件
在tasks.json文件设置args参数,制定需要编译的多个文件
(2)cmake编译多个C++源文件
2.cmake配置过程
2.1 预先安装
在windows环境下,首先预先完成如下安装
(1)安装vscode
(2)安装MinGW,并添加到环境变量
(3)安装cmake,并添加环境变量
(4)vscode C++和cmake相关插件安装,如图
2.2 vscode cmake配置
(参考:https://www.jb51.net/article/207289.htm)
(1)选择vscode左上角,文件->首选项->设置->扩展中找到cmake tools configuration及Cmake: Preferred Generators,如图打开settings.json文件
并增加如下配置,因为我们使用的是MinGW,mingw对应首选生成器MinGW Makefiles
{
"cmake.preferredGenerators": [
"MinGW Makefiles"
]
}
(2)同样是在扩展一项中,找到cmake configuration,并将Cmake Path设置为前面cmake的安装路径,如图
在vscode终端中进行如下验证,看是否成功
(3) c_cpp_properties.json配置
(参考:https://www.jb51.net/article/171801.htm)
按下ctrl+shift+p,搜索c++ config,打开c_cpp_properties.json文件
在该文件中主要有三个参数需要修改:
compilerPath,自己安装的MinGW编译器路径
intelliSenseMode,根据智能提示修改就行
configurationProvider
如图
2.3 CMakeLists.txt文件编写
(参考:https://www.jb51.net/article/207291.htm,https://www.jb51.net/article/207293.htm)
CMakeLists.txt文件编写分为两种情况,一种是main.cpp和其他自定义的cpp文件在同一路径下,如图
main.cpp和mathfunc.cpp都在lib目录下,此时,CMakeLists.txt文件内容如下:
# cmake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 项目名名称
project(testvscode)
# 头文件路径
include_directories(include)
# 枚举指定目录下的源文件,并添加到变量DIR_SRCS中
aux_source_directory(./lib DIR_SRCS)
# 生成可执行文件
add_executable(testvscode ${DIR_SRCS})
另一种情况下,main.cpp和自定义的cpp文件不在同一路径下,如图:
此时,lib文件夹内和外层目录(有cpp文件的地方就要有CMakeLists.txt)都要编写CMakeLists.txt。
其中,lib文件夹内CMakeLists.txt内容如下:
# 枚举指定目录下的源文件,并添加到变量DIR_LIB_SRCS中
aux_source_directory(. DIR_LIB_SRCS)
# 将源文件枚举变量添加到LIB_SRCS库文件中
add_library(LIB_SRCS ${DIR_LIB_SRCS})
而外层的CMakeLists.txt内容如下:
# cmake最低版本号要求
cmake_minimum_required(VERSION 3.10)
# 指定的项目名
project(testvscode)
# 添加头文件目录
include_directories(include)
# 添加lib子目录
add_subdirectory(lib)
#指定生成的可执行文件,第一个参数为文件名
add_executable(${PROJECT_NAME} main.cpp)
# 设置可执行文件的输出路径
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
#添加连接库
target_link_libraries(${PROJECT_NAME} LIB_SRCS)
2.4cmake编译
最后附上几个C++头文件和源文件代码:
mathfunc.h
double scjfunc(double a, double b);
mathfunc.cpp
#include "mathfunc.h"
double scjfunc(double a,double b)
{
return a*b*b;
}
main.cpp
#include<iostream>
#include"mathfunc.h"
using namespace std;
int main()
{
double a,b;
cout<<"enter a and b: "<<endl;
cin>>a>>b;
cout<<"a*b*b= "<<scjfunc(a,b)<<endl;
system("pause");
return 0;
}
3.总结
初次使用cmake,记录了一些使用心得,但不保证有些设置方法是最优的,有些理解是正确的,后面会不断学习不断改进,也希望大家多提提意见。
注:如果cmake编译出现“cmake-file-api 的代码模型版本(2.1)不是预期版本。应为 (2.0)。IntelliSense 配置可能不正确”错误,参考(https://blog.csdn.net/nick_young_qu/article/details/107876532)解决。
来源:https://blog.csdn.net/ha_____ha/article/details/108320475


猜你喜欢
- 在Java中,泛型的引入是为了在编译时提供强类型检查和支持泛型编程。为了实现泛型,Java编译器应用类型擦除实现: &
- 先上结论RPC请求的效率是HTTP请求的1.6倍左右,性能明显比HTTP请求要高很多。原因分析RESTful是基于HTTP协议进行交互的,H
- 本文实例为大家分享了Android学习笔记之蓝牙功能的具体代码,供大家参考,具体内容如下蓝牙:短距离无线通讯技术标准。蓝牙协议分为4层,即核
- 引言本文是关于Spark优化性能与内存使用的最佳实践,翻译整理自Tuning - Spark 3.3.2 Documentation。由于s
- LinearLayout<?xml version="1.0" encoding="utf-8"
- 实例描述现有某班学生的两份成绩,两份成绩中存在一些不一致的记录。需借助于编程方法找出这些不一致的记录。实例代码using System;us
- 目录多开理论基础多开实现原理解析代码实现:多开包名代码实现:多用户总结多开理论基础app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至
- 微信转账输入框规则(可能不全)1、小数点后两位2、起始输入小数点,显示0.3、删除到第一个位置是小数点的时候,第一个位置为0 ,避免出现小数
- C# 中同样支持多维数组(也可称为矩形数组),它可以是二维的,也可以是三维的,多维数组中的数据以类似表格(行、列)的形式存储,因此也被称为矩
- 在使用AndroidNDK开发的时候有个事情是很烦人的,那就是创建本地代码文件夹,生成本地代码文件和创建本地代码的编译文件。特别是实现本地方
- 这一定是困扰刚开始使用idea工具同学的一个大问题。三种情况会导致这种问题出现。1、你不小心按了键盘上的insert按键解决:再按一次吧2、
- 前言在我们日常的开发过程中通过打印详细的日志信息能够帮助我们很好地去发现开发过程中可能出现的Bug,特别是在开发Controller层的接口
- Android部分手机会有虚拟按键,而没有实体按键,例如华为系列的手机。然而在开发过程中,有时候会涉及底部视图的开发,最终的结果却因为虚拟按
- Android Studio常用快捷键、Android Studio快捷键大全接下来这篇android studio使用教程,主要为大家介绍
- RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,
- 本文实例讲述了C#实现两接口中同名方法。分享给大家供大家参考。具体分析如下:对于一个类实现两个接口,而这两个接口又有同名方法,C#中的处理方
- 在很多场景中我们需要验证时间日期的是否属于正确的格式,验证时间是否符合常规的。1、验证 yyyy-MM-dd HH:mm:dd 格式的日期S
- 前言说起Android进行间通信,大家第一时间会想到AIDL,但是由于Binder机制的限制,AIDL无法传输超大数据。那么我们如何在进程间
- TCP/IP、UDP、Socket对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。
- 文件上传概述实现web开发中的文件上传功能,需完成如下二步操作:在web页面中添加上传输入项在servlet中读取上传文件的数据,并保存到本