当前位置:   article > 正文

mac上VScode如何配置C++使用(方法出自于官网,很傻瓜,也很明白)_mac如何找到c++ 标准库的安装路径或头文件目录

mac如何找到c++ 标准库的安装路径或头文件目录

下面的方法基本是照抄官网的,只是翻译了一下,再加上一丢丢自己的备注。

本来不想麻烦的,因为VS code是很大众的编译器了,想着随便搜个教程,傻瓜式看着照搬就行了吧。结果不尽人意,排名靠前的试了试,都多少有问题,原理说的也不明白。最后还是自己去官网找了一下,英文看的不是很流利,但是非常傻瓜,使用方式,每一步的目的也都很清楚。

在VS code中使用Clang++的方法

在这篇指导中,你将学到如何在macOS系统中,使用Clang/LLVM的编译和调试器配置Visual Studio Code。

下面以一个简单的C++例子作为演示。

配置要求
  1. macOS系统 & 安装好的Visual Studio Code.
  2. 已安装的C++插件。你可以在扩展页面(⇧⌘X))搜索’c++’ ,进行下载安装。
    在这里插入图片描述
确认Clang是已安装的

Clang一般是mac默认安装的,打开终端并尝试以下命令,查看输出。
注:⌘+Space,输入’终端’可快捷打开。

clang --version
  • 1

– 如果没有安装的话,可以使用下面的命令进行安装。

xcode-select --install
  • 1
创建Hello world

在mac的终端中,创建一个文件夹projects,专门用来保存你的工程。然后创建一个子文件夹,命名为helloworld。接着,进入该目录,并用vs code打开该目录。具体操作如下:

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
  • 1
  • 2
  • 3
  • 4
  • 5

如此方式打开vs code,会直接建立helloworld工程,并默认创建.vscode文件夹(’.'开头的文件或文件夹是隐藏的,使用管理员身份可以在终端看到)。在后续的教程中,会在该文件夹中生成三个文件。

  • tasks.json (编译任务)
  • launch.json (调试运行配置)
  • c_cpp_properties.json (配置头文件路径和lib路径)

注:这里因为我之前试了很多教程,导致我不知道默认安装的VS code是不是可以直接在终端调用了,可能是我给弄坏了。查了一下,自己再打开就行了。先打开vs code,然后使用快捷指令,⇧⌘P,打开命令提示框,选Install ‘code’ command in PATH。
在这里插入图片描述

添加helloworld源文件

在文件资源管理器中,点击新建文件图标,新建helloworld.cpp。
在这里插入图片描述
输入下面的代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

按下⌘S保存代码,在左侧文件管理器中可以看到已经出现了你的文件。
在这里插入图片描述
同时,你可以在file菜单中设置Auto File

VisualStudio代码边缘的活动栏允许您打开不同的视图,如搜索、源代码管理和运行。在本教程后面的部分中,您将看到Run视图。您可以在VS代码用户界面文档中找到有关其他视图的更多信息。

注意:当您保存或打开C++文件时,您可能会看到C/C++扩展的关于内部版本的可用性的通知,这允许您测试新的特性和修复。您可以通过选择X(清除通知)忽略此通知。

预览提示框

helloworld.cpp文件,将鼠标悬停在vectorstring上以查看类型信息。在变量msg的开始声明后键入msg.就像调用成员函数时一样。您应该立即看到一个显示所有成员函数的列表和一个显示msg对象类型信息的窗口:
在这里插入图片描述
你可以按下Tab键插入选择的选项。

编译helloworld.cpp

接下来,在如何编译这个程序的过程中,你将创建tasks.json文件。这个过程将通过Clang++创建可执行文件。

重要的是在编辑器中打开helloworld.cpp文件,因为这一步需要对编辑器中的活动文件进行操作。

在主菜单中,选择 Terminal > Configure Default Build Task.在预选项中选择C/C++ clang++ build active file,编译当前活跃的文件。

注:需要当前页面停留在main.cpp等文件中,不能停留在task.json这类的配置文件中,否则会编译失败。
在这里插入图片描述
这将在.vscode文件夹中,创建了task.json文件。
使用下面的文本替换原有的。

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "clang++ build active file",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-stdlib=libc++",
        "-g",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "options": {
        "cwd": "${workspaceFolder}"
      },
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

这个json文件内容,在下面几点上不同于默认的json内容。

  • args 选项值为 c++17,因为helloworld.cpp文件中有使用到c++17的特性。
  • 将当前的工作路径指向helloworld.cpp文件所在的文件夹。

command 命令指定使用的编译程序。这个例子中,我们使用的是clang++.
args 是一个C++编译选项构成的数据。

${file}表示当前的源文件,并在当前目录(${fileDirname})中创建可执行文件(${fileBasenameNoExtension})。

label 是您将在任务列表中看到的值。随便你叫什么名字。

problemMatcher值选择用于在编译器输出中查找错误和警告的输出解析器。对于clang++,如果使用$gcc ,将获得最佳结果。

group对象中的“isDefault”为true时,可以通过快捷键⇧⌘B,运行此任务(即生成可执行文件)。此属性仅为方便起见;如果将其设置为false,则仍可以使用“Terminal > Run Build Task.”从终端菜单进行生成。

注意:如果想要了解更多关于task.json中的变量的意思,可以参照这里

进行编译
  1. 让页面返回helloworld.cpp,因为我们的编译操作是要操作当前活跃的文件。

  2. 为了编译这个任务,可以按下⇧⌘B,当然前提是在上一步中要将 group中的 isDefalult 设置为true。

  3. 当开始编译时,编辑器下部会出现终端窗口,显示编译输出,如下。
    在这里插入图片描述

  4. 点击 + 可以在helloworld的工作目录下,创建一个终端,输入 ls 命令可以看到目录下的文件。
    在这里插入图片描述

  5. 你可以通过 ./helloworld 运行这个程序。

修改task.json文件

你可以修改 ${file}${workspaceFolder}/*.cpp,用来同时编译目录下的所有.cpp文件。

调试程序

你可以通过按下 F5 创建一个 launch.json 文件,或者在主菜单选择 Run > Add Configuration... -> C++ (GDB/LLDB),最后在预选项中选择 lang++ build and debug active file.
在这里插入图片描述
此时,在编辑器中创建了一个 launch.json 文件并打开了。修改为如下内容:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "clang++ - Build and debug active file",
      "type": "cppdbg",
      "request": "launch",
      "program": "${fileDirname}/${fileBasenameNoExtension}",
      "args": [],
      "stopAtEntry": true,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "MIMode": "lldb",
      "preLaunchTask": "clang++ build active file"
    }
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

program 表示你想要调试运行的可执行程序,${fileDirname} 表示当前工作目录,${fileBasenameNoExtension} 表示不带有扩展名的当前文件名。最终定位到的文件,应该是你生成可执行程序的位置即可,你甚至可以写绝对路径。

stopAtEntry 默认情况下是false,该变量控制程序进入调试是否立即中断。

preLaunchTask 表示在调试前要完成的任务,他的值应该与上面配置的task.jsonlabel值相同。

开始调试
  1. 返回到helloworld.cpp 文件页面,原因等同于编译步骤,vs code 的操作是对当前的活跃文件进行的操作,否则你启动的任务使用到的相对路径就是不正确的。

  2. 按下 F5 或在菜单栏选择 Run > Start Debugging。在阅读代码前,让我们先看一下界面上的变化:

  • 在源文件的底部出现了调试框,在 Debug Output 标签页你可以看到调试输出。
  • main 函数的第一行有高亮区域,这就是当前断点的位置。
    在这里插入图片描述
  • 在左侧的视图中会展示一些调试信息,在后续的教程中还会有介绍。
  • 在编辑器的顶部还会有调试按钮的悬浮框,控制调试步骤。
单步执行该段代码

现在你可以开始执行这段代码了:

  1. 点击 step over 单步执行代码,使高亮区域移动到 for (const string& word : msg)
    在这里插入图片描述
    step over 将跳过vector & string 等中间代码的内部执行操作。
  2. 继续连续按 step over ,可以在左侧的变量窗口中,看到变量值的变化。
  3. 一直执行到文件结束,会看到有文本输出在DEBUG CONSOLE 窗口中。在2019年3月份的版本中,在执行完最后一句cout之前,DEBUG CONSOLE窗口不会看到输出。(这里使区别的windows上的vs的)
添加监视

你可能会想在调试过程中,一直监视观察一个变量的变化吧。你可以为这个变量设置一个监视。

  1. 在循环中设置一个断点。在监视窗口,点击加号,根据提示输入变量名称。这样在启动调试后,就可以监视这个变量值的变化了。
    在这里插入图片描述
  2. 另外,在断点命中时,鼠标悬停在变量上方,可快速查看变量的值。
C++ 配置

如果想要使用更多的C++扩展,可以创建一个c_cpp_properties.json文件,比如你想改变编译器的路径,include路径,使用的C++标准(如C++17) 等。

按下 ⇧⌘P ,搜索并运行 C/C++: Edit Configurations (UI)
在这里插入图片描述
这会打开C++的配置页面。
在这里插入图片描述
这个文件在 .vscode/c_cpp_properties.json,如果你直接打开可以看到如下内容:

{
  "configurations": [
    {
      "name": "Mac",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "macFrameworkPath": [
        "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
      ],
      "compilerPath": "/usr/bin/clang",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "clang-x64"
    }
  ],
  "version": 4
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

如果你要包含的头文件或lib文件不在你的工作目录,可以在这里修改Include path

编译路径

compilerPath 是非常重要的配置。扩展使用它来推断C++标准库头文件的路径。当扩展知道在哪里可以找到这些文件时,它可以提供一些有用的功能,比如智能补全和转到定义导航。

C++扩展会尝试填充一个 compilerPath 的默认路径,这取决与他在系统中搜索到的。搜索顺序如下:

  • 环境变量 PATH
  • xcode 插件路径,如 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/
Mac framework path

我不知道这是什么。不翻译了。

On the C/C++ Configuration screen, scroll down and expand Advanced Settings and ensure that Mac framework path points to the system header files. For example: /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks

重用配置

你此次配置好的环境,仍然可以方便的带到下次创建而工程中,只需要把 .vscode 文件夹下的json文件拷贝过去即可。

故障排除

最普遍的错误是,当进行编译或调试的时候,提示 helloworld.cpp 不是活跃文件,如 undefined _mainttempting to link with file built for unknown-unsupported file format,等等。这是因为编译器正在尝试编译不是源代码的文件,比如 launch.json, tasks.json, 或 c_cpp_properties.json 文件。

如果你看到关于 C++11 扩展的错误,可能是因为你没有更新 task.json 文件,使用clang++--std=c++17 参数,默认情况下,clang++ 是遵循 c++98 标准的,它不支持helloworld.cpp 中使用到的初始化操作。为了确保你修改正确,你可以返回到上面的 进行编译 的步骤。

注:我们用到的初始化操作是c++ 17才支持的,可以在en.cppreference.com查到。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/315561
推荐阅读
相关标签
  

闽ICP备14008679号