最新VS code配置C/C++情况(tasks.json, launch.json,c_cpp_properties.json ...

打印 上一主题 下一主题

主题 552|帖子 552|积分 1656

目次
一、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文件配置内容如下:
  1. {
  2.   "tasks": [
  3.     {
  4.       "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
  5.       "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
  6.       "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器,还可以是后面即将讲到的Cmake、make。
  7.       "args": [
  8.         "-fdiagnostics-color=always",
  9.         "-g",//生成和调试有关的信息,launch.json会用到这些信息。
  10.         "${file}",//编译当前打开的.c(或.cpp)文件。
  11.         "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
  12.         //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
  13.         "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
  14.       ],
  15.       "options": {
  16.         "cwd": "${workspaceFolder}"//当前工作目录(路径)。
  17.       },
  18.       "problemMatcher": ["$gcc"],//使用gcc的问题匹配器。
  19.       "group": {
  20.         "kind": "build",
  21.         "isDefault": true
  22.       },
  23.       "detail": "Task generated by Debugger."
  24.     }
  25.   ],
  26.   "version": "2.0.0"
  27. }
复制代码
       把上面配置的内容更换掉图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文件配置内容如下:
  1. {
  2.   "configurations": [
  3.     {
  4.       "name": "build launch 1",//自定义命名启动与调式的名称,将在左侧run and debug的菜单中显示名称。
  5.       "type": "cppdbg",// 配置类型,调试器类型,cppdbg为C/C++的调试类型。
  6.       "request": "launch",//配置请求类型,可以为launch(启动)或attach(附加)。
  7.       //下面是windows系统下需要调试的.exe文件及其路径,应该与tasks.json的输出的.exe文件及其路径一致。
  8.       "program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
  9.       "args": [],// 程序调试时传递给程序的命令行参数,一般设为空即可,这里提到的程序实际就上面的.exe文件,下同。
  10.       "stopAtEntry": false,// 设为true时程序将暂停在程序入口处,一般设置为false。
  11.       "cwd": "${workspaceFolder}",//当前工作目录(路径)。
  12.       "environment": [],//添加到程序的环境变量。
  13.       "externalConsole": false,//true开启外部控制台窗口,false会使用vscode内部控制台窗口。
  14.       "MIMode": "gdb",//使用gdb进行调试。
  15.       "miDebuggerPath": "D:\\rewr\\mingw64\\bin\\gdb.exe",//调试器debugger文件及其路径,调用gdb调试器。
  16.       "setupCommands": [
  17.         {
  18.           "description": "Enable pretty-printing for gdb",
  19.           "text": "-enable-pretty-printing",
  20.           "ignoreFailures": true
  21.         },
  22.         {
  23.           "description": "Set Disassembly Flavor to Intel",
  24.           "text": "-gdb-set disassembly-flavor intel",
  25.           "ignoreFailures": true
  26.         }
  27.       ],
  28.       "preLaunchTask": "build task 1"//运行和调式前要启动的tasks任务,也即要启动的编译任务,任务名要和tasks.json里的"label"值对应一致。
  29.     }
  30.   ],
  31.   "version": "2.0.0"
  32. }
复制代码
        把上面配置的内容更换掉图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文件
  1. #include "fhh.h"
  2. int main()
  3. {
  4.   func();
  5.   return 0;
  6. }
复制代码

pp1.c文件:
  1. #include <stdio.h>
  2. void func()
  3. {
  4.     printf("Good morning!\n");
  5. }
复制代码

fhh.h文件:
  1. void func(); //声明declare
复制代码

test.c文件:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     printf("Hello world!\n");
  5.     return 0;
  6. }
复制代码

        按上面配置完成后,我们可以运行程序了,但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内容更改如下:
  1. {
  2.   "tasks": [
  3.     {
  4.       "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
  5.       "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
  6.       "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器,还可以是后面即将讲到的Cmake、make。
  7.       "args": [
  8.         "-fdiagnostics-color=always",
  9.         "-g",//生成和调试有关的信息,launch.json会用到这些信息。
  10.         "${workspaceFolder}\\ff1.c",
  11.         "${workspaceFolder}\\pp1.c",
  12.         
  13.         "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
  14.         //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
  15.         "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
  16.       ],
  17.       "options": {
  18.         "cwd": "${workspaceFolder}"//当前工作目录(路径)。
  19.       },
  20.       "problemMatcher": ["$gcc"],//使用gcc的问题匹配器。
  21.       "group": {
  22.         "kind": "build",
  23.         "isDefault": true
  24.       },
  25.       "detail": "Task generated by Debugger."
  26.     }
  27.   ],
  28.   "version": "2.0.0"
  29. }
复制代码
       按上面更改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文件的默认配置的注释如下:
  1. {
  2.     "configurations": [
  3.         {
  4.             //名称,操作系统根据这个名称识别对应的属性配置。windows系统:Win32,Linux系统:Linux,macOS系统:Mac。
  5.             "name": "Win32",
  6.             //头文件路径,以便IntelliSense(智能感知)引擎的搜索。
  7.             //下面compilerPath设置了编译器路径,则系统的(C/C++内置的)头文件路径不需要再在下面标出。
  8.             "includePath": [
  9.                 "${workspaceFolder}/**"//当前项目所在根目录并递归搜索子目录,也即当前workspace文件夹的路径,而且还会递归查找所有子目录。
  10.             ],
  11.             //IntelliSense(智能感知)引擎在分析文件时要使用的预处理器定义的列表。
  12.             "defines": [
  13.                 "_DEBUG",
  14.                 "UNICODE",
  15.                 "_UNICODE"
  16.             ],
  17.             //根据下面这个路径查询编译器,以便启用更准确的IntelliSense(智能感知),因为IntelliSense有几种模式,见下面配置。
  18.             //这里并不是调用编译器,真正启用编译器编译的是在tasks.json文件里。
  19.             //下面值为空,则默认找到的任何编译器。
  20.             "compilerPath": "D:\\rewr\\mingw64\\bin\\gcc.exe",
  21.             "cStandard": "c17",//用于IntelliSense(智能感知)引擎的c标准(版本)。
  22.             "cppStandard": "gnu++14",//用于IntelliSense(智能感知)引擎的c++标准(版本)。
  23.             //IntelliSense有几种模式,Windows系统:windows-msvc-x64,Linux系统:linux-gcc-x64,macOS系统:macos-clang-x64。
  24.             "intelliSenseMode": "windows-gcc-x64"
  25.         }
  26.     ],
  27.     "version": 4
  28. }
复制代码
       我们可以在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文件
  1. #include <stdio.h>
  2. #include<openssl/evp.h>//表示头文件目录下的openssl目录下的evp.h文件。
  3. int main() {
  4.     OpenSSL_add_all_algorithms();
  5.     printf("The OpenSSL is installed successfully!\n");
  6.     return 0;
  7. }
复制代码
       hh.c文件的头文件evp.h会调用库包OpenSSL中的库文件libcrypto,我们根据OpenSSL的安装地址及要使用的库文件libcrypto,配置tasks.json、c_cpp_properties.json中头文件、库的路径。
tasks.json文件配置如下:
  1. {
  2.   "tasks": [
  3.     {
  4.       "type": "cppbuild",//任务类型,可以取cppbuild、shell、process,三种执行时稍有差异,这里选择默认cppbuild。
  5.       "label": "build task 1",//任务标签(标记),也即任务名称,任务名称要和launch.json里的"preLaunchTask"值对应一致。
  6.       "command": "D:\\rewr\\mingw64\\bin\\gcc.exe",//编译器及其路径,.c用gcc.exe编译器,.cpp用g++.exe编译器。
  7.       "args": [
  8.         "-fdiagnostics-color=always",
  9.         "-g",//生成和调试有关的信息,launch.json会用到这些信息。
  10.         "${file}",//编译当前打开的.c(或.cpp)文件。
  11.         
  12.         "-I",//-I(大写i)声明为头文件路径。
  13.         //下面是第三方库的头文件位置,不指出完整路径,但代码中#include后面需要补全位置。
  14.         "C:\\Program Files\\OpenSSL-Win64\\include",
  15.         "-L",// -L 声明为库文件路径。
  16.         //使用的第三方库位置,需要指出完整位置。
  17.         "C:\\Program Files\\OpenSSL-Win64\\lib\\VC\\x64\\MD",
  18.         //-l(小写L)声明为库文件。
  19.         "-l",
  20.         "libcrypto",//要调用的库文件。
  21.         "-o",//指定编译的输出,windows系统下输出.exe文件,见下行。
  22.         //下面是windows系统下输出.exe文件及其路径,应该与launch.json的"program"的值代表的路径一致。
  23.         "${workspaceFolder}\\${fileBasenameNoExtension}.exe"
  24.             
  25.       ],
  26.       "options": {
  27.         "cwd": "${workspaceFolder}"//当前工作目录(路径)。
  28.       },
  29.       "problemMatcher": ["$gcc"],// 使用gcc的问题匹配器。
  30.       "group": {
  31.         "kind": "build",
  32.         "isDefault": true
  33.       },
  34.       "detail": "Task generated by Debugger."
  35.     }
  36.   ],
  37.   "version": "2.0.0"
  38. }
复制代码
c_cpp_properties.json文件配置如下
  1. {
  2.     "configurations": [
  3.         {
  4.             //名称,操作系统根据这个名称识别对应的属性配置。windows系统:Win32,Linux系统:Linux,macOS系统:Mac。
  5.             "name": "Win32",
  6.             //头文件路径,以便IntelliSense(智能感知)引擎的搜索。
  7.             //下面compilerPath设置了编译器路径,则系统的(C/C++内置的)头文件路径不需要再在下面标出。
  8.             "includePath": [
  9.                 "${workspaceFolder}/**",//当前项目所在根目录并递归搜索子目录,也即当前workspace文件夹的路径,而且还会递归查找所有子目录。
  10.                 "C:\\Program Files\\OpenSSL-Win64\\include"//第三方库的路径。代码中#include后面需要补全位置,这里可以缺省\\**。
  11.             ],
  12.          
  13.    
  14.             //IntelliSense(智能感知)引擎在分析文件时要使用的预处理器定义的列表。
  15.             "defines": [
  16.                 "_DEBUG",
  17.                 "UNICODE",
  18.                 "_UNICODE"
  19.             ],
  20.             //根据下面这个路径查询编译器,以便启用更准确的IntelliSense(智能感知),因为IntelliSense有几种模式,见下面配置。
  21.             //这里并不是调用编译器,真正启用编译器编译的是在tasks.json文件里。
  22.             //下面值为空,则默认找到的任何编译器。
  23.             "compilerPath": "D:\\rewr\\mingw64\\bin\\gcc.exe",
  24.             "cStandard": "c17",//用于IntelliSense(智能感知)引擎的c标准(版本)。
  25.             "cppStandard": "gnu++14",//用于IntelliSense(智能感知)引擎的c++标准(版本)。
  26.             //IntelliSense有几种模式,Windows系统:windows-msvc-x64,Linux系统:linux-gcc-x64,macOS系统:macos-clang-x64。
  27.             "intelliSenseMode": "windows-gcc-x64"
  28.         }
  29.     ],
  30.     "version": 4
  31. }
复制代码
      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的配置中可能需要增长类似下面语句:
  1. "browse": {
  2.                 "path": ["C:\\Program Files\\OpenSSL-Win64\\lib","${workspaceFolder/**}"]
  3.               }
复制代码
      上面报告了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文件配置如下:
  1. #cmake最低版本需求,不加入此行会受到警告信息,输入下载安装的cmake版本。
  2. cmake_minimum_required(VERSION 3.29)
  3. #项目名称,即生成的.exe文件名称,这里的文件名称必需与launch.json的参数"program"的一致。
  4. #这个文件是保存在tasks.json的指定的目录,在本例中是build文件夹。
  5. project(main)
  6. #把当前目录.下所有源文件加入变量SRC_LIST,
  7. #这里的.代表当前目录,也即当前workspace(工作区、工作空间),本例中cc1文件夹位置。
  8. aux_source_directory(. SRC_LIST)
  9. #生成应用程序main,在windows下会自动生成main.exe。
  10. 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文件配置如下:
  1. {
  2.     "tasks": [
  3.         {   //Cmake active file 操作,要和launch.json里的"preLaunchTask"值对应一致。
  4.             "label": "Cmake active file",
  5.             "dependsOn":[
  6.                 //Cmake active file操作依赖于下面的cmake和 make操作,也即调用下面两个标签label的操作。
  7.                 "cmake",
  8.                 "make"
  9.             ]
  10.         },
  11.         {
  12.             "label": "cmake",//cmake操作。
  13.             "type":"shell",           
  14.             "command":"cmake",//执行cmake操作所使用的命令。
  15.             "args": [                 //cmake命令执行时的命令行参数。
  16.                 "-G MinGW Makefiles", //生成 mingw32-make 能够编译的Makefile。
  17.                 "../"
  18.             ],
  19.         },
  20.         {
  21.             "label": "make",              //make 操作。
  22.             "command":"mingw32-make.exe", //执行 make 操作所使用的命令(mingw32-make.exe已经添加了环境变量)。
  23.             "args": [
  24.             ],
  25.             "options": {
  26.                 "cwd": "${workspaceFolder}\\build" //表示执行当前操作的工作目录。
  27.             }
  28.         },
  29.     ],
  30.     "version": "2.0.0",
  31.     "options": {
  32.         "cwd": "${workspaceFolder}\\build"  //表示执行上述操作时的工作目录。
  33.     },
  34. }
复制代码
        这里的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文件配置如下:
  1. {
  2.     "configurations": [
  3.       {
  4.         "name": "build and debug active file",
  5.         "type": "cppdbg",
  6.         "request": "launch",
  7.         //下面是windows系统下需要调试的.exe文件及其路径,应该与CmakeLists.txt文件中project的文件名一致。
  8.         "program":  "${workspaceFolder}\\build\\main.exe",  
  9.         "args": [],
  10.         "stopAtEntry": false,
  11.         //使用${fileDirname},需要先打开项目的一个c/c++文件再运行,
  12.         //因为这个值表示打开的文件所在的绝对路径,因而需要打开一个文件来确定路径,
  13.         //否则,提示variable ${fileDirname} can not be resolved。
  14.         //下面也可以用${workspaceFolder},表示工作台下的路径,这个值不需要打开文件来确定路径。
  15.         "cwd": "${workspaceFolder}",
  16.         "environment": [],
  17.         "externalConsole": false,
  18.         "MIMode": "gdb",
  19.         "miDebuggerPath": "D:\\rewr\\mingw64\\bin\\gdb.exe",
  20.         "setupCommands": [
  21.           {
  22.             "description": "Enable pretty-printing for gdb",
  23.             "text": "-enable-pretty-printing",
  24.             "ignoreFailures": true
  25.           },
  26.           {
  27.             "description": "Set Disassembly Flavor to Intel",
  28.             "text": "-gdb-set disassembly-flavor intel",
  29.             "ignoreFailures": true
  30.           }
  31.         ],
  32.         "preLaunchTask": "Cmake active file"//要和tasks.json里的"label"值对应一致。
  33.       }
  34.     ],
  35.     "version": "2.0.0"
  36.   }
复制代码
         上面(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文件配置如下:
  1. #cmake最低版本需求,不加入此行会受到警告信息,输入下载安装的cmake版本。
  2. cmake_minimum_required(VERSION 3.29)
  3. #项目名称,即生成的.exe文件名称,这里的文件名称必需与launch.json的参数"program"的一致。
  4. #这个文件是保存在tasks.json的指定的目录,在本例中是build文件夹。
  5. project(main)
  6. #把当前目录src下所有源文件加入变量SRC_LIST,
  7. #这里的src代表存放源文件的目录,也即当前workspace(工作区、工作空间下的src文件夹,
  8. #本例中也即D:/pv/vsco/cc1/src。
  9. aux_source_directory(. SRC_LIST)
  10. #生成应用程序main,在windows下会自动生成main.exe。
  11. add_executable(main ${SRC_LIST})
复制代码
       上面简单介绍了vs code通过CMake构建工程(项目)情况,只是一个抛砖引玉的作用,更多有关CMake构建工程(项目)情况的知识,可以参考其他相干资料。

       末了,欢迎你点击下面链接到场一个小问卷,你的举手之劳,让博主被宠若惊,不胜感激!
https://www.wjx.cn/vm/w42huU2.aspx#

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表