ToB企服应用市场:ToB评测及商务社交产业平台
标题: 最新VS code配置C/C++情况(tasks.json, launch.json,c_cpp_properties.json [打印本页]
作者: 惊雷无声 时间: 2024-6-14 22:14
标题: 最新VS code配置C/C++情况(tasks.json, launch.json,c_cpp_properties.json
目次
一、VScode配置C/C++情况,需设置tasks.json, launch.json文件
二、安装C/C++扩展,配置tasks.json、launch.json、c_cpp_properties.json文件
(1)安装c/c++扩展
(2)配置tasks.json文件
(3)配置launch.json文件
(4)配置中的参数(属性)阐明
(5)运行程序(运行单个或多个c/c++文件)
(6)关于配置多个使命task和启动调试launch
(7)配置c_cpp_properties.json文件、引入第三方库、指定头文件路径
三、vs code通过CMake构建工程(项目)情况运行C/C++
(1) Cmake、CMakeLists.txt、Makefile
(2)VS code中Cmake的情况配置
(3)tasks.json、launch.json文件配置
最新VS code配置C/C++情况(tasks.json, launch.json,c_cpp_properties.json)
及运行多个文件、配置Cmake
一、VScode配置C/C++情况,需设置tasks.json, launch.json文件
安装Visual Studio Code(VS Code)代码编辑器后,我们要运行c/c++语言,不但要安装具有实现调试功能的C/C++扩展,而且安装该扩展后至少还需要配置launch.json,tasks.json这两个文件,如许就可以运行和调试c/c++程序。
在vs code中,有的语言安装具有实现调试功能的扩展(Extension)后,还需要配置多个文件,是由于这种编程语言的编译器种类多或编译过程分多阶段,我们需要举行设置,以便机动达到个人需要。C/C++的编译器种类较多,而且它们的编译过程有预处理、编译、汇编和链接四个步骤,可见,C/C++语言具有编译器种类多、编译过程分多阶段的特点,因此,作为为一个轻量级的开发情况工具Vs Code,我们还需要额外地举行扩展的文件设置,以达到编译过程中对各个环节的个人需求设置,好比:设置编译器路径选择对应的编译器,设置头文件(.h)路径(预处理)、还可以设置库函数路径(链接)等。而python的编译过程相对比力单一,编译成字节码后解释执行,因此,在vscode中安装python的实现调试功能的扩展(Extension)后,可以不消特意配置文件来实现运行和调试。
VScode配置C/C++情况前,我们当然先要安装Vs Code和C/C++编译器,Vs Code的安装参见最新VS Code安装详细教程及vs code配置-CSDN博客,C/C++编译器的安装参见编译器(Compiler)及c/c++编译器安装(c+安装)-CSDN博客。
下面我们以windows系统为例, 在VS code里配置C/C++情况。
二、安装C/C++扩展,配置tasks.json、launch.json、c_cpp_properties.json文件
(1)安装c/c++扩展
在vscode和c/c++编译器安装好后,我们启动vscode,我们可以打开一个项目文件夹,如图2-1所示,bb1文件夹是存放项目文件的位置,Vscode会默认bb1也是一个workspace(工作区、工作空间)。
图 2-1 打开项目地点文件夹
单击图2-1左侧边栏的 扩展图标,在弹出的扩展搜刮栏(如图2-2所示)的红色方框中输入c/c++搜刮,下方会显示有关扩展(Extension),我们单击红色箭头所指的C/C++扩展,会出现install按键,单击install即可安装该扩展,该扩展具有智能感知(IntelliSense)、调试(debugging)等作用。
图 2-2 扩展搜刮栏
C/C++扩展安装完后,会对应有launch.json、tasks.json、c_cpp_properties.json等文件,下面主要介绍Tasks.json、Launch.json、C_cpp_properties.json文件的配置。
(2)配置tasks.json文件
下面我们来配置tasks.json文件。tasks.json文件是设置将要执行的使命,也就是配置编译使命,该文件配置后我们写的代码才能被C/C++编译器正常编译。
图2-6 Terminal菜单
如图2-6所示单击vscode菜单栏的Terminal栏,单击红箭头所指的Configure Tasks...选项,弹出如图2-7所示的select a task to configure的菜单。
图2-7 select a task to configure
我们选择图2-7中红色箭头所指的Create tasks.json file from template选项,即从模板(样板)创建tasks.json,弹出如图2-8 select a task template的菜单选项。
图2-8 select a task template
我们选择图2-8中红色箭头所指的Others选项,即运行任意外部命令的例子(Example to run an arbitrary external command),如图2-9所示会打开一个tasks.json文件窗口,同时,bb1文件夹中会生成一个.vscode文件夹,tasks.json保存在这个文件夹里,后面即将讲到的launch.json、c_cpp_properties.json配置文件也都会保存在这个文件夹里。
图2-9 Tasks.json文件
图2-9的tasks.json是初次配置,默认为一个简单的配置,我们可以在tasks的中括号里举行配置,在配置路径时只能使用\\或/隔开目次,后面其它.json文件也一样。tasks.json文件配置内容如下:
- {
- "tasks": [
- {
- "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
- "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
- "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器,还可以是后面即将讲到的Cmake、make。
- "args": [
- "-fdiagnostics-color=always",
- "-g",//生成和调试有关的信息,launch.json会用到这些信息。
- "${file}",//编译当前打开的.c(或.cpp)文件。
- "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
- //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
- "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
- ],
- "options": {
- "cwd": "${workspaceFolder}"//当前工作目录(路径)。
- },
- "problemMatcher": ["$gcc"],//使用gcc的问题匹配器。
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "detail": "Task generated by Debugger."
- }
- ],
- "version": "2.0.0"
- }
复制代码 把上面配置的内容更换掉图2-9的tasks.json文件的内容并保存即可,上面配置含义见其注释。
(3)配置launch.json文件
下面我们来配置launch.json文件。launch.json文件主要是有关启动使命、调试的配置,具有程序启动调试功能。launch.json文件会启用上面tasks.json的使命,并能实现调试功能。
单击左侧边栏运行与调试图标 ,右侧出现run and debug按钮信息,如图2-10所示。
图 2-10 Run and Debug
初次配置,单击图2-10红色箭头所指的create a launch.json filie字体,出现图2-11右侧选择调试器(Select debugger)的菜单。
图2-11 选择调试器
我们选择图2-11红色箭头所指的C++(GDB/LLDB),如图2-12所示会打开一个launch.json窗口,同时,launch.json也保存在bb1文件夹中的.vscode文件夹里。这里的GDB、LLDB是可以作为C/C++的调试器(debugger)。
图2-12 Launch.json文件
图2-12的launch.json是初次配置,默认为空的,我们可以在configurations的中括号里举行配置。launch.json文件配置内容如下:
- {
- "configurations": [
- {
- "name": "build launch 1",//自定义命名启动与调式的名称,将在左侧run and debug的菜单中显示名称。
- "type": "cppdbg",// 配置类型,调试器类型,cppdbg为C/C++的调试类型。
- "request": "launch",//配置请求类型,可以为launch(启动)或attach(附加)。
- //下面是windows系统下需要调试的.exe文件及其路径,应该与tasks.json的输出的.exe文件及其路径一致。
- "program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
- "args": [],// 程序调试时传递给程序的命令行参数,一般设为空即可,这里提到的程序实际就上面的.exe文件,下同。
- "stopAtEntry": false,// 设为true时程序将暂停在程序入口处,一般设置为false。
- "cwd": "${workspaceFolder}",//当前工作目录(路径)。
- "environment": [],//添加到程序的环境变量。
- "externalConsole": false,//true开启外部控制台窗口,false会使用vscode内部控制台窗口。
- "MIMode": "gdb",//使用gdb进行调试。
- "miDebuggerPath": "D:\\rewr\\mingw64\\bin\\gdb.exe",//调试器debugger文件及其路径,调用gdb调试器。
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- },
- {
- "description": "Set Disassembly Flavor to Intel",
- "text": "-gdb-set disassembly-flavor intel",
- "ignoreFailures": true
- }
- ],
- "preLaunchTask": "build task 1"//运行和调式前要启动的tasks任务,也即要启动的编译任务,任务名要和tasks.json里的"label"值对应一致。
- }
- ],
- "version": "2.0.0"
- }
复制代码 把上面配置的内容更换掉图2-12的launch.json文件的内容并保存即可,上面配置含义见其注释。
(4)配置中的参数(属性)阐明
Tasks.json、Launch.json文件中的参数(属性)含义参见上面各文件中的注释。tasks.json的"label"的值应该与launch.json的"preLaunchTask"的值一致,否则,提示Could not find the task…报错。在两个文件中windows系统下.exe文件及其路径也要一致。
上面tasks.json、launch.json文件配置里,有的参数可以缺省,也可以增长参数,更多参数设置可以参考其他资料,这里不一一列举。
下面列出一些参数的含义。
${workspaceFolder} :表现当前workspace(工作区、工作空间)文件夹的路径,也即当前项目绝对路径,好比:当前项目绝对路径D:\pv\vsco\bb1。
${fileDirname}:表现当前打开的文件的绝对路径,但不包括文件名,好比:打开main.c文件,该文件地点的绝对路径(不包括文件名)为D:\pv\vsco\bb1\src。
${workspaceFolder}是workspace(工作区、工作空间)的绝对路径,${fileDirname}是当前打开的文件的绝对路径。
${workspaceFolder}/**:表现当前workspace文件夹的路径,而且还会递归搜刮(recursive search,递归查找)所有子目次,好比:当前项目绝对路径D:\pv\vsco\bb1,不但要搜刮bb1文件夹,还会递归搜刮bb1的所有子目次。
${workspaceRootFolderName}:表现workspace文件夹名,也即当前项目地点的文件夹的名称,好比:上面的bb1文件夹。
${file}:表现当前打开的文件,包括绝对路径,文件名,文件后缀名。
${relativeFile}:从当前地点的绝对路径打开其子路径的文件,即以相对路径打开文件,好比:文件main.c的绝对路径为D:\pv\vsco\bb1\src\main.c,若当前是在bb1文件夹位置,使用${relativeFile}设置,则是在当前所处的bb1位置以src \main.c的子路径打开main.c。
${fileBasename}:当前打开的含有后缀的文件名,不包括路径。
${fileBasenameNoExtension}:表现当前打开的文件名,但不包括路径和后缀名。
cwd:current working directory,当前工作目次,它是操作系统当前正在运行的历程地点的目次。在命令行界面(好比,cmd)中,用户输入命令时,默认情况下会在cwd下执行。
更多参数含义参考Visual Studio Code Variables Reference。
(5)运行程序(运行单个或多个c/c++文件)
利用上面配置我们将运行下面几个文件:
ff1.c文件:
- #include "fhh.h"
- int main()
- {
- func();
- return 0;
- }
复制代码
pp1.c文件:
- #include <stdio.h>
- void func()
- {
- printf("Good morning!\n");
- }
复制代码
fhh.h文件:
test.c文件:
- #include <stdio.h>
- int main()
- {
- printf("Hello world!\n");
- return 0;
- }
复制代码
按上面配置完成后,我们可以运行程序了,但tasks.json文件中使用了"${file}"参数,表现编译当前打开的.c(或.cpp)文件,按这个配置,vscode只能编译一个.c(或.cpp)文件,可以运行上面的test.c文件,编译时不涉及到我们定义的其他文件。但不能运行ff1.c文件,因为涉及到调用pp1.c文件的函数。假如我们的程序要调用其他文件的函数,也就是要编译多个文件,用"${file}"是不能实现的,运行代码,vs code的终端TERMINAL显示collect2.exe: error: ld returned 1 exit status,并弹窗提示The prelaunchTask … terminated wiht exit code -1报错。这时候,我们需要把各文件路径放到里面去,即"${file}"参数更换成各个文件路径的参数。我们以上面ff1文件运行为例,tasks.json内容更改如下:
- {
- "tasks": [
- {
- "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
- "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
- "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器,还可以是后面即将讲到的Cmake、make。
- "args": [
- "-fdiagnostics-color=always",
- "-g",//生成和调试有关的信息,launch.json会用到这些信息。
- "${workspaceFolder}\\ff1.c",
- "${workspaceFolder}\\pp1.c",
-
- "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
- //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
- "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
- ],
- "options": {
- "cwd": "${workspaceFolder}"//当前工作目录(路径)。
- },
- "problemMatcher": ["$gcc"],//使用gcc的问题匹配器。
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "detail": "Task generated by Debugger."
- }
- ],
- "version": "2.0.0"
- }
复制代码 按上面更改tasks.json的配置,launch.json保持不变,点击图2-13的红色箭头按钮或Vscode菜单栏run里面的运行选项即可运行ff1.c文件。
图2-13 运行ff1文件
运行多个C/C++文件,需要把运行有关的.c(或.cpp)文件及其路径写入到tasks.json里,才能正常运行。
上面配置中,岂论是.c文件,照旧.exe文件都是在bb1文件夹,也即当前workspace(工作区、工作空间),如图2-12左侧的文件浏览窗口。我们也可以在配置时指定其他位置存放.c文件和.exe文件,在配置中写好对应的路径即可,这里不一一列举。
(6)关于配置多个使命task和启动调试launch
上面我们是配置一个使命task,一个启动调试launch,我们可以在上面tasks.json文件里配置多个使命,多个使命是根据"label"来引用的,在launch.json文件里配置多个启动调试,多个启动调试是用"name"来引用的,如图2-13红色箭头所指处的下拉栏中会显示已经配置的各个启动调试的"name",我们可以根据某个名称的启动调试来运行程序。各个启动调式都也会对应某个使命。另外,我们在vscode右侧浏览窗口打开launch.json文件,右下侧有Add Configuration…提示按键,单击进入里面的菜单我们可以选择某个种类。
这里我们不列举配置多个使命task和对应的启动调试launch的情况,其原理是一样的,只是在.json文件里面增长类似的参数,多个使命task的每个使命用大括号区分开,同理,多个启动调试launch。
(7)配置c_cpp_properties.json文件、引入第三方库、指定头文件路径
c_cpp_properties.json文件的内容主要是对编辑情况的配置,主要是针对IntelliSense(智能感知)引擎的有关配置。intelliSense是各种代码编辑功能的通用术语,包括:代码补全、参数信息提示、快速信息描述提示和成员列表提示等,因而,intelliSense也称为代码提示(code hinting)。
当我们装了C/C++编译器,并在vs code中安装了具有调试功能的C/C++扩展(Extension)后,会自动产生默认的c_cpp_properties.json配置。上面tasks.json、launch.json文件配置完后,我们就运行C/C++程序了,也是接纳默认的c_cpp_properties.json配置。另外,这个三个.json文件无须额外设置,默认允许调用内置的尺度库及头文件(.h文件),以及当前workspace(工作区、工作空间)下的头文件(.h文件)。也就是讲,假如没有特别要求,一般我们可以不消配置c_cpp_properties.json,按上面配置完tasks.json、launch.json后就可以运行代码了。但我们要指定头文件、库的位置,我们需要配置c_cpp_properties.json、tasks.json文件。
我们可以通过Vs code的菜单栏View→Command Palette打开命令面板,输入关键词C/C++ edit,弹出如图2-14菜单选项,选择匹配到的命令C/C++: Edit Configurations (UI)或C/C++: Edit Configurations (JSON),也会在当.vscode文件夹中生成c_cpp_properties.json文件。其中,UI(用户界面、User Interface)是提供一个可视化的界面手动设置,JSON是c_cpp_properties.json文件形式的设置。
图2-14 Edit Configurations
这里我们选择C/C++: Edit Configurations (JSON),因为c_cpp_properties.json文件设置更机动,可以举行多种配置。如图2-15所示vs code的右侧出现c_cpp_properties.json的默认配置的文件窗口,同时,c_cpp_properties.json也保存在bb1文件夹中的.vscode文件夹里。
图2-15 c_cpp_properties.json文件的默认配置
上图2-15的c_cpp_properties.json文件的默认配置的注释如下:
- {
- "configurations": [
- {
- //名称,操作系统根据这个名称识别对应的属性配置。windows系统:Win32,Linux系统:Linux,macOS系统:Mac。
- "name": "Win32",
- //头文件路径,以便IntelliSense(智能感知)引擎的搜索。
- //下面compilerPath设置了编译器路径,则系统的(C/C++内置的)头文件路径不需要再在下面标出。
- "includePath": [
- "${workspaceFolder}/**"//当前项目所在根目录并递归搜索子目录,也即当前workspace文件夹的路径,而且还会递归查找所有子目录。
- ],
- //IntelliSense(智能感知)引擎在分析文件时要使用的预处理器定义的列表。
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE"
- ],
- //根据下面这个路径查询编译器,以便启用更准确的IntelliSense(智能感知),因为IntelliSense有几种模式,见下面配置。
- //这里并不是调用编译器,真正启用编译器编译的是在tasks.json文件里。
- //下面值为空,则默认找到的任何编译器。
- "compilerPath": "D:\\rewr\\mingw64\\bin\\gcc.exe",
- "cStandard": "c17",//用于IntelliSense(智能感知)引擎的c标准(版本)。
- "cppStandard": "gnu++14",//用于IntelliSense(智能感知)引擎的c++标准(版本)。
- //IntelliSense有几种模式,Windows系统:windows-msvc-x64,Linux系统:linux-gcc-x64,macOS系统:macos-clang-x64。
- "intelliSenseMode": "windows-gcc-x64"
- }
- ],
- "version": 4
- }
复制代码 我们可以在c_cpp_properties.json文件里针对多个操作系统配置IntelliSense属性,vs code 运行代码时根据"name"来唯一识别调用,各个操作系统的IntelliSense属性配置用大括号区分开,这里不一一列举。
下面我们在vs code中配置c/c++中增长引入第三方库的配置。这里以引入第三方库包(openssl)为例,在c_cpp_properties.json、tasks.json文件里增长头文件、库的路径配置,从而实现添加第三方库的效果,从这个例子我们也可以看到VSCode C/C++对头文件路径、库的配置。
OpenSSL由多个库文件组成的库包,是一个开放源代码的软件库包,应用程序可以使用这个包来举行安全通讯,避免窃听,同时确认另一端连接者的身份。
库文件是颠末编译器编译好的二进制文件,库函数是库文件的组成部分,而我们在代码中定义的函数是没有颠末编译器编译过的,因而库函数与用户自定义的函数是有区别的。另外,C/C++的库函数都有头文件(.h)。
在配置c_cpp_properties.json、tasks.json中头文件、库的路径前,我们先要安装OpenSSL库包,windows系统可以下载别人已颠末编译器编译好的安装文件:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions。安装好OpenSSL后,我们根据OpenSSL的安装地址及要使用的库文件,来配置tasks.json、c_cpp_properties.json中头文件、库的路径,这里以下面的hh.c文件为例。
hh.c文件:
- #include <stdio.h>
- #include<openssl/evp.h>//表示头文件目录下的openssl目录下的evp.h文件。
-
- int main() {
- OpenSSL_add_all_algorithms();
- printf("The OpenSSL is installed successfully!\n");
- return 0;
- }
复制代码 hh.c文件的头文件evp.h会调用库包OpenSSL中的库文件libcrypto,我们根据OpenSSL的安装地址及要使用的库文件libcrypto,配置tasks.json、c_cpp_properties.json中头文件、库的路径。
tasks.json文件配置如下:
- {
- "tasks": [
- {
- "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
- "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
- "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器。
- "args": [
- "-fdiagnostics-color=always",
- "-g",//生成和调试有关的信息,launch.json会用到这些信息。
- "${file}",//编译当前打开的.c(或.cpp)文件。
-
- "-I",//-I(大写i)声明为头文件路径。
- //下面是第三方库的头文件位置,不指出完整路径,但代码中#include后面需要补全位置。
- "C:\\Program Files\\OpenSSL-Win64\\include",
- "-L",// -L 声明为库文件路径。
- //使用的第三方库位置,需要指出完整位置。
- "C:\\Program Files\\OpenSSL-Win64\\lib\\VC\\x64\\MD",
- //-l(小写L)声明为库文件。
- "-l",
- "libcrypto",//要调用的库文件。
- "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
- //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
- "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
-
- ],
- "options": {
- "cwd": "${workspaceFolder}"//当前工作目录(路径)。
- },
- "problemMatcher": ["$gcc"],// 使用gcc的问题匹配器。
- "group": {
- "kind": "build",
- "isDefault": true
- },
- "detail": "Task generated by Debugger."
- }
- ],
- "version": "2.0.0"
- }
复制代码 c_cpp_properties.json文件配置如下:
- {
- "configurations": [
- {
- //名称,操作系统根据这个名称识别对应的属性配置。windows系统:Win32,Linux系统:Linux,macOS系统:Mac。
- "name": "Win32",
- //头文件路径,以便IntelliSense(智能感知)引擎的搜索。
- //下面compilerPath设置了编译器路径,则系统的(C/C++内置的)头文件路径不需要再在下面标出。
- "includePath": [
- "${workspaceFolder}/**",//当前项目所在根目录并递归搜索子目录,也即当前workspace文件夹的路径,而且还会递归查找所有子目录。
- "C:\\Program Files\\OpenSSL-Win64\\include"//第三方库的路径。代码中#include后面需要补全位置,这里可以缺省\\**。
- ],
-
-
- //IntelliSense(智能感知)引擎在分析文件时要使用的预处理器定义的列表。
- "defines": [
- "_DEBUG",
- "UNICODE",
- "_UNICODE"
- ],
- //根据下面这个路径查询编译器,以便启用更准确的IntelliSense(智能感知),因为IntelliSense有几种模式,见下面配置。
- //这里并不是调用编译器,真正启用编译器编译的是在tasks.json文件里。
- //下面值为空,则默认找到的任何编译器。
- "compilerPath": "D:\\rewr\\mingw64\\bin\\gcc.exe",
- "cStandard": "c17",//用于IntelliSense(智能感知)引擎的c标准(版本)。
- "cppStandard": "gnu++14",//用于IntelliSense(智能感知)引擎的c++标准(版本)。
- //IntelliSense有几种模式,Windows系统:windows-msvc-x64,Linux系统:linux-gcc-x64,macOS系统:macos-clang-x64。
- "intelliSenseMode": "windows-gcc-x64"
- }
- ],
- "version": 4
- }
复制代码 Launch.json保持前面的配置,无须修改,上面配置好tasks.json、c_cpp_properties.json文件后,就可以运行hh.c文件了,如图2-16所示。
图2-16 配置引入第三库后,运行hh.c文件
上面tasks.json文件的配置与前面的配置基本类似,仅仅增长了头文件、库的路径,上面配置库文件路径要指明完备路径,若写成"C:\\Program Files\\OpenSSL-Win64\\lib",会显示cannot find -llibcrypto,collect2.exe: error: ld returned 1 exit status,弹窗提示The prelaunchTask build task 1 terminated wiht exit code -1。
上面c_cpp_properties.json文件的配置与前面的配置基本类似,仅仅增长了头文件的路径。
若要用到更多的头文件、库的路径等,可以在tasks.json文件中类似增长,好比:增长”-I”和头文件路径,同理,c_cpp_properties.json文件。
通过vs code菜单栏File→Preferences→Settings→User→Extensions→IntelliSense找到C_Cpp.intelliSenseEngine设置(也可以在Settings窗口的搜刮栏直接搜刮C_Cpp.intelliSenseEngine),也即intelliSense引擎设置,我们看到里面接纳的是默认(default)设置,若选择了Tag Parser设置,对有的程序代码,上面c_cpp_properties.json的配置中可能需要增长类似下面语句:
- "browse": {
- "path": ["C:\\Program Files\\OpenSSL-Win64\\lib","${workspaceFolder/**}"]
- }
复制代码 上面报告了Vs code配置c/c++情况的tasks.json、launch.json、c_cpp_properties.json文件,配置的内容是用短号隔开的,每个短号放一行,现实可以放多行。只要用逗号隔开,可以把相干的放到一行,更多有关这三个文件的配置参考Get Started with C++ and MinGW-w64 in Visual Studio Code和c_cpp_properties.json reference。
三、vs code通过CMake构建工程(项目)情况运行C/C++
上面我们在vs code中安装c/c++扩展,配置tasks.json、launch.json后可以运行C/C++程序,但若运行的项目文件比力多,用上述方法比力麻烦,下面我们介绍CMake工具,通过cmake管理程序的编译,可以进步项目管理效率,岂论是运行单个文件照旧运行多个文件更加自动化。
(1) Cmake、CMakeLists.txt、Makefile
Cmake主要用于软件构建、测试和打包,是一个跨平台的自动化构建系统工具,常常用于控制软件项目的编译和构建过程。
Cmake使用平台无关的、描述构建过程的CMakeLists.txt文件来控制软件编译过程,并生成可以在用户选择的编译器情况中使用的项目文件。CMake通过读取CMakeLists.txt文件来生成相应的项目文件和makefile,从而控制整个构建过程。
CMakeLists.txt文件是一个与平台无关的、用于定制编译流程的文件(也即一个描述编译链接的规则文件)。cmakeList.txt中指令不区分巨细写,但CMakeList.txt中的参数和变量是区分巨细写,名称只能用字母,数字,下划线,破折号。
Makefile的主要作用包括自动化编译和链接、管理依赖关系、跳过不必要的编译,以及执行其他使命,如清理临时文件或生成文档。
在VS code中使用CMake,我们先要在电脑中安装CMake工具,而且还要在Vs code中安装CMake和CMake Tools两个扩展(Extension),若要运行C/C++,也要在vs code中安装C/C++扩展。
vscode会借助扩展调用和管理Cmake。若没有先在电脑中安装Cmake工具,vscode提示bad cmake executable:"".Check to make sure it is installed or the "cmake.cmakePath" setting contains the correct path,运行程序代码提示The prelaunchTask … terminated with exit code -1。
我们先到CMake官网CMake - Upgrade Your Software Build System下载已经编译过的二进制(Binary)安装文件安装到电脑里(留意,不要下载源代码(Source)文件,这种文件没有编译过)。
在windows安装Cmake时,留意选择Add CMake to the system PATH for …,如许增长到系统的情况变量。
情况变量是在操作系统中一个具有特定名字的对象,它代表了一个或者多个应用程序所将使用到的信息。当要求系统运行一个程序而没有告诉它程序地点的完备路径时,系统除了在当前目次下面探求此程序外,还会到情况变量path中指定的路径去找可运行的对象。
情况变量中的系统变量是对所有效户有效,用户变量是对当前登录的windows账号有效,当系统变量查找不到时,会到当前用户变量中查找。另外,情况变量名称是不区分巨细写的,好比:PATH和path,两个名称是一样的。
(2)VS code中Cmake的情况配置
下面我们需要在vs code中配置上面已经安装的Cmake工具的情况。
Cmake安装完成后,在Vs code中安装CMake扩展(Extension)、CMake Tools扩展、C/C++扩展,我们可以安装C/C++ Extension Pack扩展,该扩展含有上述三个扩展。CMake扩展让VS Code支持Cmake语言,CMake Tools让VS Code提供Cmake一个强大的工作流, 用于在Visual Studio Code(vs code)中配置、构建、浏览和调试基于CMake的项目。
留意,这里提到的两个CMake的概念是有区别的,一个是具有编译器特点的可执行文件,一个是vs code的扩展(Extension),扩展通常用来载入软件中,使得软件具有某种额外的功能。
我们打开一个项目,在项目根目次下,也即当前workspace(工作区、工作空间),创建一个build文件夹,将用来存放CMake通过读取CMakeLists.txt文件来生成相应的项目文件和makefile,如图3-1所示。
图3-1 VS code 资源浏览器
在项目根目次下创建一个CmakeLists.txt文件(如图3-1红色箭头所指),该文件暂时可以为空文件,也可以先配置好,这里配置好CmakeLists.txt文件。
CmakeLists.txt文件配置如下:
- #cmake最低版本需求,不加入此行会受到警告信息,输入下载安装的cmake版本。
- cmake_minimum_required(VERSION 3.29)
- #项目名称,即生成的.exe文件名称,这里的文件名称必需与launch.json的参数"program"的一致。
- #这个文件是保存在tasks.json的指定的目录,在本例中是build文件夹。
- project(main)
- #把当前目录.下所有源文件加入变量SRC_LIST,
- #这里的.代表当前目录,也即当前workspace(工作区、工作空间),本例中cc1文件夹位置。
- aux_source_directory(. SRC_LIST)
- #生成应用程序main,在windows下会自动生成main.exe。
- add_executable(main ${SRC_LIST})
复制代码 上面CmakeLists.txt文件配置,使用了最基本的Cmake命令语句,更多cmake的代码语句可以参考相干资料。
由于Cmake配置是依赖CmakeLists.txt文件的,应该先创建CmakeLists.txt文件,然后举行下面的配置cmake(这里面含有配置Cmake需要调用的编译器,在本例中是调用c/c++的编译器),否则,在下面配置cmake时会提示搜刮查找CmakeLists.txt文件。
打开vs code菜单栏File→View→Command Palette…,在搜刮框中输入Cmake,如图3-2所示。
图3-2 Command Palette搜刮栏
我们选择图3-2红色箭头所指的Cmake:Configure,弹出如图3-3配置Cmake。
图3-3 Select a Kit
我们选择图3-3红色箭头的选项,选择c/c++编译器完成Cmake配置。VS CODE会自动完成配置,同时,图3-3的build文件夹会自动生成CMake通过读取CMakeLists.txt文件来生成相应的项目文件和makefile,如图3-4所示。
图3-4 vscode中CMake生成的文件
现实上,安装cmake后,再打开vscode,也会提示我们配置cmake,如图3-5所示,我们也可以通过图3-5来配置Cmake。
图3-5 Cmake Tools配置项目
(3)tasks.json、launch.json文件配置
按前面的方法打开tasks.json、launch.json文件,分别配置这两个文件。
tasks.json文件配置如下:
- {
- "tasks": [
- { //Cmake active file 操作,要和launch.json里的"preLaunchTask"值对应一致。
- "label": "Cmake active file",
- "dependsOn":[
- //Cmake active file操作依赖于下面的cmake和 make操作,也即调用下面两个标签label的操作。
- "cmake",
- "make"
- ]
- },
- {
- "label": "cmake",//cmake操作。
- "type":"shell",
- "command":"cmake",//执行cmake操作所使用的命令。
- "args": [ //cmake命令执行时的命令行参数。
- "-G MinGW Makefiles", //生成 mingw32-make 能够编译的Makefile。
- "../"
- ],
- },
- {
- "label": "make", //make 操作。
- "command":"mingw32-make.exe", //执行 make 操作所使用的命令(mingw32-make.exe已经添加了环境变量)。
- "args": [
- ],
- "options": {
- "cwd": "${workspaceFolder}\\build" //表示执行当前操作的工作目录。
- }
- },
- ],
- "version": "2.0.0",
- "options": {
- "cwd": "${workspaceFolder}\\build" //表示执行上述操作时的工作目录。
- },
- }
复制代码 这里的tasks.json是调用已安装的Cmake和mingw32-make.exe。上面make现实是调用我们安装c/c++的编译器套件MinGW-w64中的mingw32-make.exe命令,编译器套件MinGW-w64的安装参考编译器(Compiler)及c/c++编译器安装(c+安装)-CSDN博客。
CMake充当构建工程系统的生成器,而Make专注于执行Makefile中指定的构建指令。为了运行大型项目,我们起首编写CMakeLists.txt,然后,通过cmake命令就可以生成makefile文件,再通过make命令就可以使用这个makefile文件,从而生成可执行文件。
launch.json文件配置如下:
- {
- "configurations": [
- {
- "name": "build and debug active file",
- "type": "cppdbg",
- "request": "launch",
- //下面是windows系统下需要调试的.exe文件及其路径,应该与CmakeLists.txt文件中project的文件名一致。
- "program": "${workspaceFolder}\\build\\main.exe",
- "args": [],
- "stopAtEntry": false,
- //使用${fileDirname},需要先打开项目的一个c/c++文件再运行,
- //因为这个值表示打开的文件所在的绝对路径,因而需要打开一个文件来确定路径,
- //否则,提示variable ${fileDirname} can not be resolved。
- //下面也可以用${workspaceFolder},表示工作台下的路径,这个值不需要打开文件来确定路径。
- "cwd": "${workspaceFolder}",
- "environment": [],
- "externalConsole": false,
- "MIMode": "gdb",
- "miDebuggerPath": "D:\\rewr\\mingw64\\bin\\gdb.exe",
- "setupCommands": [
- {
- "description": "Enable pretty-printing for gdb",
- "text": "-enable-pretty-printing",
- "ignoreFailures": true
- },
- {
- "description": "Set Disassembly Flavor to Intel",
- "text": "-gdb-set disassembly-flavor intel",
- "ignoreFailures": true
- }
- ],
- "preLaunchTask": "Cmake active file"//要和tasks.json里的"label"值对应一致。
- }
- ],
- "version": "2.0.0"
- }
复制代码 上面(2)、(3)配置没有先后关系,(2)、(3)配置完成后就可以运行程序了,如图3-6所示。
图3-6 VS code中Cmake情况运行C/C++
颠末上述配置后,我们可以运行与项目有关的文件,若其中含有与项目无关的文件,运行时,终端TERMINAL会提示Terminal will be reused by tasks,即终端被多个使命重用,弹出The preLaunchTask … terminated with exit code 2非常,我们可以把项目相干文件放到一个文件夹里,在CmakeLists.txt中修改aux_source_directory(dir variable)的指定目次的dir参数,如图3-7所示,在本例中我们可以增长一个src文件夹存放上述三个文件,aux_source_directory(. SRC_LIST)命令修改为aux_source_directory(src SRC_LIST)。通过这种方式把与项目无关的文件隔离开来,只运行与项目有关的这个文件夹src,就可以避免上述非常。
图3-7 CmakeLists.txt命令设置
图3-7 的CmakeLists.txt文件配置如下:
- #cmake最低版本需求,不加入此行会受到警告信息,输入下载安装的cmake版本。
- cmake_minimum_required(VERSION 3.29)
- #项目名称,即生成的.exe文件名称,这里的文件名称必需与launch.json的参数"program"的一致。
- #这个文件是保存在tasks.json的指定的目录,在本例中是build文件夹。
- project(main)
- #把当前目录src下所有源文件加入变量SRC_LIST,
- #这里的src代表存放源文件的目录,也即当前workspace(工作区、工作空间下的src文件夹,
- #本例中也即D:/pv/vsco/cc1/src。
- aux_source_directory(. SRC_LIST)
- #生成应用程序main,在windows下会自动生成main.exe。
- add_executable(main ${SRC_LIST})
复制代码 上面简单介绍了vs code通过CMake构建工程(项目)情况,只是一个抛砖引玉的作用,更多有关CMake构建工程(项目)情况的知识,可以参考其他相干资料。
末了,欢迎你点击下面链接到场一个小问卷,你的举手之劳,让博主被宠若惊,不胜感激!
https://www.wjx.cn/vm/w42huU2.aspx#
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) |
Powered by Discuz! X3.4 |