【ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译】 您所在的位置:网站首页 菲洛梅娜在线观看 【ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译】

【ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译】

2023-08-11 21:31| 来源: 网络整理| 查看: 265

目录标题 VS code配置c++编译环境1. Linux系统安装2. 在Ubuntu中安装VS code2.1. 首先下载对应系统的VS code安装包2.2. 安装VS code 3. 在ubuntu系统下的vscode中配置g++/gcc编译、运行环境3.1. 打开VS Code,快捷键(Ctrl + Shift + X)打开扩展模块3.2. 安装GCC/g++/gdb3.3. 测试配置好的基础版VS code 4. 在ubuntu系统下的vscode中配置cmake,编写的CMakeLists.txt进行多文件调试。4.1. 安装CMake4.2. 使用CMake创建项目4.2.1. 直接手动构建CMakeList4.2.2. 在VS code中通过快捷键生成CMakeList,然后在此基础上修改 5. 通过本地windows安装VS code远程配置ubuntu中的c++编译环境

VS code配置c++编译环境

之前在用linux系统下使用VS code编译运行c++,经常各种配置,虽然最终都能够成功跑起来,但是没有深刻理解其中的原理,出错的时候只能参考别人的建议各种尝试,对出错原因及修改办法不甚理解,基于此,本人打算从Ubuntu(linux)安装到Vscode编辑多个cpp文件开始一步一步实现,其中主要是先实现但是cpp文件的运行和调试,然后配置cmake实现多个cpp文件互联编译运行。

1. Linux系统安装

本文最终目的为在linux环境下搭建VS code/c++编译运行环境,因此选择虚拟机安装ubuntu系统,首先安装VMware虚拟机,然后下载ubuntu镜像,在虚拟机中安装unbuntu系统,操作过程参考网上教程,资源很多,此处不再详细讲解安装步骤;安装成功ubuntu后,记得更换下载源,一般选用清华源和阿里源,参看ubuntu 16.04 更换国内源

2. 在Ubuntu中安装VS code

下载安装的方式有很多种,有命令行下载安装、命令行结合可视化界面下载安装,本人使用的是后者。

2.1. 首先下载对应系统的VS code安装包

进入VScode官网下载VS code,此处有一些技巧,因为vscode在ubuntu中下载较慢,可以先在window下下载好ubuntu对应的VSCode安装包,然后通过ssh协议传输至Ubuntu,即可实现高效安装。这里展开讲一下实现细节,有助于理解gitbash与gihub及本地端口与远程端交互问题。 (1). 首先在本地window端安装gibash(或者xshell)等终端工具,或者直接使用window自带的终端工具powershell。 (2). 使用scp命令将本地端下载的安装包复制到虚拟机ubuntu中(远程端),此时要保证远程端已经安装Openssh协议,没有安装参考网上教程安装,本地windows端默认安装了ssh协议,所以两者都支持scp命令工具,与远程端建立链接需要知道远程端的ip及对应的用户名。

ifconfig #在虚拟机终端输入该命令就可查看对应的ip地址,为显示信息中 **i net地址: **后的信息。 scp test.txt [email protected]:/mnt/tengfei #在本地window端打开gitbash,将对应的文件复制到虚拟机19x.xxx.xx.xxx中,其中ytf666为用户名

在scp的过程中可能会遇到如下问题: 在这里插入图片描述 这种一般是该文件夹没有开通远程权限的问题,在linux终端输入如下命令即可

chmod -R 777 /mnt/ #即可开通mnt文件夹下的所有权限

如果使用的是xshell,且遇到如下问题 在这里插入图片描述 这种一般是主机端或者远程端没有安装scp导致,如果确认已经安装scp(可通过gitbash或者powershell来实验确认),则可能是安装的xshell少插件等问题。

2022/11/8添加内容如下 上面阐述了从本地服务器复制文件到远程服务器,此处介绍从远程服务器下载文件到本地服务器,无论是从远程服务器下载还是上传到远程服务器,均需要在本地服务器打开git bash(终端),且操作路径在本地服务器路径下;如果要下载文件夹或者压缩包,则使用下面的命令:

scp -r [email protected]:/mnt/cfs/users/tengfei.yue/tengfei/data/changjing/json_class_image/other1000.tar /c/Users/admin/Desktop/ //分别是远程服务器的账户名和ip、所需下载的文件路径、最终的目的路径,-r表示递归的意思

注意上面的命令中如果下载的是文件夹或者压缩包,则需要 -r 进行递归下载,单个文件的话可以省略 -r ,并且冒号后面不能有空格,否则会出现如下所示错误: 在这里插入图片描述 在这里插入图片描述

2.2. 安装VS code

本人为了便于管理一般把安装包放置在下载(downloads)下,即/home/ytf666/Downloads路径下,在此处打开终端,安装VS code

sudo dpkg -i code_1.71.1-1662667267_amd64.deb

安装后,其快捷方式会默认存放在 /usr/share/applications 目录下 在这里插入图片描述 将快捷方式复制到桌面

cp code.desktop ~/Desktop/

选中桌面的vscode快捷图标,右击鼠标,允许启动。(此时齿轮icon变成正常图标,双击正常启动vscode) 在这里插入图片描述

3. 在ubuntu系统下的vscode中配置g++/gcc编译、运行环境 3.1. 打开VS Code,快捷键(Ctrl + Shift + X)打开扩展模块

在这里插入图片描述

3.2. 安装GCC/g++/gdb

VS Code只是一个文本编辑器,如果想要编译C++,需要安装g++编译器,GCC代表GNU编译器集合,GDB是GNU调试器。 快捷键Ctrl + Alt + T打开终端,输入:

sudo apt-get update # 过时的 Linux 发行版有时会干扰安装新软件包的尝试,因此先对软件包更新一下 gcc -v #检查一下是否已安装好gcc sudo apt install gcc #没有安装好gcc,则用该命令安装即可

gcc安装成功使用 gcc -v 检查,结果如下: 在这里插入图片描述 接下来使用命令安装 GNU 编译器工具和 GDB 调试器:

gdb -v #检查一下是否已经安装好gdb sudo apt-get install build-essential gdb #安装gdb

检验是否安装成功:

whereis g++ whereis gdb

在这里插入图片描述 此时已经完成最基本的c++编译环境配置,可以编译、运行、调试单个的cpp/c文件。

3.3. 测试配置好的基础版VS code

此处测试的为单个项目,因此在单个文件的根目录下配置task和launch即可,后面介绍同时在多个项目上工作时,创建工作区的方法。

在指定目录下创建.cpp文件用来测试,本人习惯在mnt下进行测试。

cd /mnt mkdir tengfeiubuntu touch /tengfeiubuntu/hello.cpp

将测试文件目录加入到vscode中。 在这里插入图片描述

在hello.cpp中测试输出hello word,并按Ctrl+s保存,此时可能提示不能对指定文件进行修改,大概率时因为没有开通操作权限,因此可以在终端对指定文件夹开通权限 在这里插入图片描述

chmod -R 777 /mnt/ #开通了mnt文件夹下所有文件的所有权限

此时点击运行一般会在当前文件夹(工作空间)中自动生成.vscode文件夹,且里面包含launch.json和tasks.json两个文件; 如果没有自动生成的话,在vscode界面左边点击“运行和调试”按键 ,选择“创建launch.json”,同时这些文件都可以自己手动创建,但是一般都会自动生成的。此时调试运行可能会遇到各种问题,需要搞明白launch.json和tasks.json两个文件中各参数的具体含义,并针对性的进行修改。 本人在进行vs code配置c++编译环境时,并没有在.vscode文件夹里自动生成c_cpp_properties.json,也没有手动创建,依然可以编译调试运行c++代码,无论是快捷键还是右上角按钮均可以正常操作,但是这个文件也是VSCode调试c++时常用的json文件,个人理解:扩展程序会根据当前系统环境配置基本信息,如果信息完整则只有launch.json和task.json即可实现c++程序的调试运行编译,但毕竟是扩展程序根据当前系统环境配置的基本信息,因此有可能配置不完整,这时需要通过生成c_cpp_properties.json文件来配置缺少的信息。一般linux系统下默认生成的基本配置信息就够用了,但是window系统下是需要更改的,下面代码为ubuntu平台下默认生成的c_cpp_properties.json文件,可在这个文件中添加配置。

4. VSCode调试C++时三个常用的json VS Code是基于文件夹运行的(配置好一切环境后会在同目录下生成.vscode文件,里面是我们的配置文件,以后只把这个文件夹拷贝并改动就可以实现在不同的机器上运行VS Code来编译C/C++程序),新建好文件夹并用VS Code打开,新建.cpp文件,此时还无法编译、运行。 linux下用vscode调试c++程序时,会在工作区的.vscode文件中遇到launch.json和tasks.json,作用分别如下: 1)、lauch.json负责的是启动任务,执行文件(可执行文件) 2)、tasks.json负责的是配置相关任务。简单来说就是负责编译链接生成可执行文件,其实就是执行终端的编译指令[g++ -g main.cpp -o main.o]。所以在执行launch.json文件之前必须先执行tasks.json 3)、launch.json和tasks.json通过launch.json中的preLaunchTask关联起来。launch.json中的preLaunchTask是为了启动tasks.json的,所以preLaunchTask对应的标签应该与task.json一致。

(1) launch.json参数介绍—对应调试相关的参数 打开方式:Ctrl+Shift+p 打开命令行(或者点击菜单栏 查看>命令面板 或者按F1),键入关键字 “launch”,选择 “Debug:Open launch.json” -> "C++(GDB/LLDB)。 作用:调试程序,如设置debug,设置可执行文件的路径,预编译等。

生成launch.json文件后,其他的属性可不改,但必须将program属性的值修改为要执行的文件。然后点击Debug->Start Debugging,既可以开始调试了,点击侧边栏的Debug图标可查看BreakPoint、Call Stack等。

{ "configurations": [ //配置域 { "name": "(gdb) 启动", //配置文件的名字 "type": "cppdbg", //调试的类型,正在使用的调试器,使用Visual Studio Windows时必须为cppvsdbg,使用GDB或LLDB时必须为cppdbg. "request": "launch", //配置文件的请求类型,有launch和attach两种,表示此配置是用于启动程序还是附加到已运行的实例上 "targetArchitecture": "x64", //硬件内核架构,为64bit // "program": "输入程序名称,例如 ${workspaceFolder}/a.out", //这个是默认生成的样式 // "program": "${workspaceRoot}/${fileBasenameNoExtension}", //${workspaceRoot}指的是.vscode所在的目录(绝对路径),${fileBasenameNoExtension}指的是所运行文件不带扩展名的名称,即main.cpp是main "program": "${fileDirname}/${fileBasenameNoExtension}", //调试可执行文件/程序,此处为可执行文件的路径,包括文件名字,即要执行的可执行文件的完整路径,${fileDirname}指的是所运行文件所在的目录(绝对路径),这里和.vscode在同一目录(绝对路径)下 "args": [], //主函数调用时传入的参数,一般为空 "stopAtEntry": false, //设为true时程序将暂停在程序入口处,一般设为false,是否在 main 函数处暂停执行 "cwd": "${fileDirname}", //调试时的工作目录,设置调试器启动的应用程序的工作目录,不是可执行程序的路径,而是所运行程序的路径,或者.vscode所在的目录(绝对路径),且此处的cwd路径与task.json的cwd路径不一样 // "cwd": "${workspaceFolder}", //.vscode所在的目录(绝对路径),与${fileDirname}都可以,且此处的cwd路径与task.json的cwd路径不一样 "environment": [], "externalConsole": false, //控制是否显示在新的终端,即打开外部终端执行程序,而不是在 VSCode 的控制台中运行,true显示外置的控制台窗口,false显示内置终端 // "externalConsole": true, "MIMode": "gdb", //指定连接的调试器,可以省略不写 //"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",//调试器路径,在Linux环境下需要注释掉这一行 "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "description": "将反汇编风格设置为 Intel", "text": "-gdb-set disassembly-flavor intel", "ignoreFailures": true } ], "preLaunchTask": "g++", //调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应,一般为编译程序,c++为g++, c为gcc,采用cmake的多文件编译则为build } ], "version": "2.0.0" //配置文件的版本,以前使用是0.2.0,新版本已经弃用,改用为2.0.0 }

(2) task.json参数介绍—编译参数设置 打开方式:Ctrl + Shift + p进入命令行(或者点击菜单栏 查看>命令面板 或者按F1),选择 Tasks: Configure Default Build Task 作用:指定编译规则,和preLaunchTask配合使用可以实现自动编译。 生成tasks.json后,根据自己需求修改command、args或其他字段。

{ "tasks": [ { "type": "cppbuild", // "label": "C/C++: g++ 生成活动文件", "label": "g++", // 当前编译任务的名称,与launch.json的preLaunchTask相对应 "command": "/usr/bin/g++", // cpp使用g++命令,c使用gcc,指定对应的路径,编译时执行的程序,调试ros时使用catkin_make DCMAKE_BUILD_TYPE=Debug,此时对应的命令:g++ -g ${file} -o ${fileDirname}/${fileBasenameNoExtension} "args": [ //编译时候的参数,传递给 command 的参数,也就是编译参数 "-fdiagnostics-color=always", "-g", //添加gdb调试选项 "${file}", //当前运行的文件 "-o", //指定生成可执行文件的名称 "${fileDirname}/${fileBasenameNoExtension}", //生成可执行文件的路径(包括文件名字,此处没有带后缀.out) // "-std=c++11", //使用c++11 // "-lpthread" //链接thread库 ], "options": { "cwd": "${fileDirname}" //需要进入到执行tasks任务的文件夹中,即可执行文件所在的目录(绝对路径),不包括文件名 }, //${fileDirname} 当前打开的文件所在的绝对路径,不包括文件名 "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true //为 True 时,用户可以通过 Ctrl+Shift+B 直接运行编译任务 }, "detail": "调试器生成的任务。" } ], "version": "2.0.0" }

常用路径参数含义

${workspaceRoot} 当前打开的文件夹的绝对路径+文件夹的名字 &{workspaceFolder}当前程序的路径,.vscode路径 ${file}当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名 ${fileBasename} 当前打开的文件名+后缀名,不包括路径 ${fileBasenameNoExtension} 当前打开的文件的文件名,不包括路径和后缀名 ${fileDirname} 当前打开的文件所在的绝对路径,不包括文件名 ${fileExtname} 当前打开的文件的后缀名

此时可以任意进行运行、调试、编译了,无论是用F5快捷键还是用右上角的按钮都可以成功运行了。 在这里插入图片描述

(3) c_cpp_properties.json—编译环境相关的设置 本人在进行vs code配置c++编译环境时,并没有在.vscode文件夹里自动生成c_cpp_properties.json,也没有手动创建,依然可以编译调试运行c++代码,无论是快捷键还是右上角按钮均可以正常操作,但是这个文件也是VSCode调试c++时常用的json文件,个人理解:扩展程序会根据当前系统环境配置基本信息,如果信息完整则只有launch.json和task.json即可实现c++程序的调试运行编译,但毕竟是扩展程序根据当前系统环境配置的基本信息,因此有可能配置不完整,这时需要通过生成c_cpp_properties.json文件来配置缺少的信息。一般linux系统下默认生成的基本配置信息就够用了,但是window系统下是需要更改的,下面代码为ubuntu平台下默认生成的c_cpp_properties.json文件,可在这个文件中添加配置。

C_Cpp_Properties.json是用于配置编译器环境的,包括启动器代号、位数(这些是自定义的)、编译选项、启动设置、编译模式等。 includePath指向C/C++标准库、用户头文件所在位置。不需要CMake也可以直接编写C/C++

打开方式:Ctrl+Shift+P进入命令行(或者点击菜单栏 查看>命令面板 或者按F1),搜索C/C++ Edit configuration 作用:指定头文件路径/编译器路径

{ "configurations": [ { "name": "Linux", //环境名字 "includePath": [ "${workspaceFolder}/**" //指定头文件路径,这里${workspaceFolder}指定的是.vscode所在目录,如有需要在后面添加“,”后再添加新的路径。 ], "defines": [], "compilerPath": "/usr/bin/gcc", //编译器的路径,可根据自己的安装情况进行设置 "cStandard": "c11", "cppStandard": "c++11", //设置使用的 C/C++ 标准 "intelliSenseMode": "linux-gcc-x64" } ], "version": 4

} 对于Windows环境下,需要自己下载编译器安装并配置,比如下载MinGW64,然后需要配置环境变量:

变量名:MINGW 变量值:D:\worksoftware\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin 引入到Path环境变量中: %MINGW%

然后重启VS code,并在c_cpp_properties.json文件中添加

"compilerPath": "D:\\worksoftware\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\g++.exe"

配置好gcc/g++、gdb调试运行编译c++环境后,运行或者调试.cpp文件,会在VS code界面左下角显示当前使用的是launch.json中configurations里的name,我这里写的是gdb启动,且后面跟着当前文件夹(工作空间)名字,我这里是onlygcc,如下图所示 在这里插入图片描述 此时点击右上角的三角按钮选择运行c/c++文件或者按F5会出现如下界面,选择所设置launch.json文件的configuration中name参数对应的名字即可 在这里插入图片描述

此时VS code右上角三角按钮中有运行c/c++文件、调试c/c++文件以及Run code三个按钮,其中运行c/c++文件、调试c/c++文件已经链接到配置好的.vscode,执行路径是通过.vscode里的json文件实现g++编译运行和gdb调试;Run code按钮是在左侧栏扩展中安装的运行扩展程序,通过自动配置调用g++实现c/cpp文件的编译运行的,与前两者的执行路径不一样;此时F5运行快捷键是链接到.vscode里的json文件中的,如果没配置.vscode则可能链接到Run code扩展按钮; 就目前我所知道的Run code扩展貌似只能进行编译运行,不能调试,只安装Run code扩展不能实现debug调试功能,想要断点debug调试还是要配置.vscode中的launch.json文件使用gdb调试。

4. 在ubuntu系统下的vscode中配置cmake,编写的CMakeLists.txt进行多文件调试。

先决条件:确保已经安装了gcc/g++/gdb,没有安装的话看3.2部分。 安装VS code插件,搜索安装插件CMake Tools。 在这里插入图片描述

4.1. 安装CMake

官网下载CMake安装包,以3.22.4版本为例,下载这个包,如下图: 在这里插入图片描述 如果在ubuntu端下载较慢,可以在本地window端下载对应版本的cmake安装包,然后可采取2.1所阐述的手段进行下载。 安装过程:

cd 到资源下载目录下,解压资源;

tar -zxvf cmake-3.22.4.tar.gz

cd 到解压后的cmake-3.22.4目录下,进行检查;

./bootstrap

可能会出现Could not find OpenSSL 在这里插入图片描述 安装openssl之后,再检查一遍;

./bootstrap

编译构造;

make

安装;

sudo make install

检验安装是否成功。

cmake --version 4.2. 使用CMake创建项目

为什么要使用CMake?理论上说,任意一个C++程序都可以用g++来编译。但当程序规模越来越大时,一个工程可能有许多个文件夹和源文件,这时输入的编译命令将越来越长。通常一个小型C++项目可能含有十几个类,各类间还存在着复杂的依赖关系。其中一部分要编译成可执行文件,另一部分要编译成库文件。如果仅靠g++命令,我们需要输入大量的编译指令,整个编译过程会变得异常繁琐。因此,对于C++项目,使用一些工程管理工具会更加高效。历史上工程师们曾使用makefile进行自动编译,但cmake要比它更加方便。 在一个cmake工程中,用cmake命令生成一个makefile文件,然后用make命令根据这个makefile文件的内容编译整个工程。

使用CMake创建项目有两种方法:直接手动构建CMakeList;在VS code中通过快捷键生成CMakeList,然后在此基础上修改。

4.2.1. 直接手动构建CMakeList

编写一个求两数之和的程序项目,输入两个数a、b,可得到两数求和之后的结果c=a+b。 a. 准备程序文件 (1). 打开终端,cd到自己常用放置项目的路径

cd /mnt/tengfeiubuntu/ (2). 建立自己的项目文件夹 mkdir stardtest (3). 进入项目中,并用VS code打开编辑,也可以用vim,但是vim不好用,所以推荐用VS code cd stardtest //进入该项目 mkdir build //创建build文件夹(工作空间),也可以在VS code界面创建 mkdir include //创建include文件夹(工作空间),也可以在VS code界面创建 mkdir src //创建src文件夹(工作空间),也可以在VS code界面创建 touch CMakeLists.txt //创建build文件夹(工作空间),也可以在VS code界面创建 code . //用VS code打开以便于编辑

code .打开后的界面如下: 在这里插入图片描述

下面是比较通用的CMake目录结构,用include文件夹管理.h头文件,用.src文件夹管理.cpp源文件,在.build文件夹内完成一系列的编译工作,这样cmake生成的中间文件都在build目录,不会“污染”开发目录(将build目录加入.gitignorej即可忽略CMake所产生的所有中间文件),在编译出问题的时候也可以直接删除buidl目录重新编译。 . ├── build ├── CMakeLists.txt ├── include │ └── Sum.h └── src ├── Sum.cpp └── main.cpp

头文件Sum.h/Sum.hpp,如下所示:

#ifndef __HELLO_H #define __HELLO_H int Calculate_sum_Of_Two_Number(int x, int y); #endif

头文件Sum.cpp,如下所示:

int Calculate_sum_Of_Two_Number(int x,int y) { int z=0; z=x+y; return (z); }

主函数main.cpp,如下所示:

#include "hello.h" #include #include using namespace std; int main() { int a=0, b=0, c=0; //------c语言模式,不需要使用库iostream------- //printf("please input two paramerer: ") //scanf("%d", &a) //scanf("%d", &b) //c = Calculate_sum_Of_Two_Number(a,b); //printf("the sum is: %d", c) //------ c++模式,需要使用库iostream---------- cout b; c = Calculate_sum_Of_Two_Number(a,b); cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有