MacOS使用VSCode编写C++程序如何配置clang编译环境

前言

这段时间在练习写C++和Python,用vscode这个开发工具,调试的时候遇到一些麻烦,浪费了很多时间,因此整理了这个文档。将详细的细节描述清楚,避免与我遇到同样问题的人踩坑。

1.开发环境的配置

vscode的开发环境配置非常的简单,只需要在插件中搜索c++的支持,此方法适用于任何其他语言,如下图,我们只添加C/C++这个插件,vscode就开始工作了。

2.建立一个cpp文件来用于调试环境的测试

建立一个以.cpp结尾的文件,编写一段最简单的c++代码,例如打印一段文字,用于后续的测试

下面的代码使用标准输出stdio与iostream分别打印 hello world

cpp 复制代码
#include <stdio.h>
#include <iostream>

typedef SetSpace::SetType SetType;

int main()
{
    std::cout << "hello world!\n";
    printf("hello world");
}

3.调试环境的配置

在vscode中配置调试环境,有三个重要的文件 launch.json,task.json与c_cpp_properties.json

这三个配置文件的参数很多,但好在vscode会帮助我们去生成,我们只需要修改少数部分即可

下面列举出这三个文件如何自动生成以及修改

1.c_cpp_properties.json

我们通过快捷键command+shift+p打开命令行工具,在搜索框中输入edit,点击下方联想结果中的

以Edit Configuration..命名的选项。之后点击他,你会发现工作目录中会自动创建出c_cpp_properties.json.

可以看到这个文件主要是编译调试工具的目录配置,我没有做任何修改,它是可以正常工作的,

当然如果你的电脑不能,可以根据具体的本地环境做适当的参数调整,例如编译器的路径(compilerPath)等

java 复制代码
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "macos-clang-arm64"
        }
    ],
    "version": 4
}

2.task.json

可以通过与添加c_cpp_properties.json相同的方式添加,也可以打开编写好的.cpp文件,例如第二部创建的,然后点击右上角运行旁边的设置按钮,选中你想执行的调试程序,vscode会自动创建task.json。当然也可以通过task.json的Add configurtion按钮添加多种配置。

默认创建后的json如下,这里如果只需要编译单个文件则不需要做修改,如果需要编译多个.cpp文件,需要将args中的{file}修改为{workspaceFolder}/*.cpp

java 复制代码
{
            "type": "cppbuild",
            "label": "C/C++: clang 生成活动文件",
            "command": "/usr/bin/clang",
            "args": [
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        },

3.launch.json

可以通过与添加c_cpp_properties.json相同的方式添加,也可以直接点击运行或调试按钮,在报错后,vscode会自动生成对应的配置文件,例如如果运行时选择的是c/c++ clang 那么vscode会自动生成clang相关的配置,如果选择的是gcc,那么vscode会自动生成gcc相关的配置。当然在launch.json页面也可以点击右下角Add Configuration按钮添加相关的配置。

默认生成的json文件program需要修改,vscode会在该key的value默认注明需要改成可执行文件的路径。我们要改成task.json中args的value中最后一个配置项,即可执行文件路径( {fileDirname}/{fileBasenameNoExtension} ),修改后 的json如下

java 复制代码
  {
            "name": "cpp 调试",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb",
            "preLaunchTask": "C/C++: clang++ 生成活动文件"
        }
相关推荐
鱼子星_11 小时前
【C++】反向迭代器:反向迭代器的底层认识与模拟实现
开发语言·c++·笔记·stl
郝学胜-神的一滴11 小时前
[简化版 GAMES 104] 现代游戏引擎 05:游戏引擎世界构建核心机制深度解析
c++·程序人生·unity·游戏引擎·计算机图形学·opengl
Darkwanderor11 小时前
C++的流简介和简单使用
开发语言·c++
乐观勇敢坚强的老彭12 小时前
C++ STL 常用容器的速查表
java·c++·算法
lingran__12 小时前
C++ STL map 与 set 底层剖析与模拟实现万字详解|基于红黑树,复刻 SGI-STL 泛型复用架构
开发语言·c++·stl·set·map·泛型编程·sgi-stl
星轨初途12 小时前
LeetCode 热题 100——day11 滑动窗口最大值
数据结构·c++·算法·leetcode·职场和发展
重生之小比特12 小时前
【初阶C++】内存管理
c++·内容运营
不会代码的小猴1 天前
21. 泛型编程上
开发语言·c++·笔记·算法
青瓦梦滋1 天前
传输层UDP/TCP协议
linux·网络·c++·网络协议·tcp/ip·udp
一只旭宝1 天前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法