MacOS 环境下 VSCode 的 C++ 环境搭建
编译器安装
编译器可以选择 Clang 或者 GCC,在 MacOS 上 Clang 的安装更为简单一些。
Clang(推荐)
打开终端输入命令,
clang -v
查看是否已经安装。
如果已经安装,会输出类似于如下的信息:
Apple clang version 14.0.0 (clang-1400.0.29.202) Target: arm64-apple-darwin22.2.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
如果没有安装,则输入命令Xcode-select --install
进行安装。
GCC
首先需要安装 brew
,安装方法见官网,如果国内访问速度比较慢,可以自行搜索 brew 国内镜像。
然后输入命令brew install gcc
进行安装。
插件安装
在 VSCode 中安装如下的三个插件
C/C++:提供了编辑的代码智能提示(IntelliSense)和调试(debugging) 功能;
CodeLLDB:提供了更加强力的调试支持;
Code Runner:更方便地运行代码(非调试);
配置文件生成
c_cpp_properties.json
c_cpp_properties.json
中包含了编译器路径、头文件路径等等的设置信息,这些信息主要用于编辑的代码智能提示(IntelliSense)。
在 VSCode 中按下 ⇧⌘P,输入命令C/C++: Edit Configurations (UI)
打开 C/C++ 的配置页面。根据 CPU 架构(一般是 Intel 或 Apple Silicon) 和编译器(Clang 或 GCC) 的不同,我们需要在配置页面中设置 编译器路径
和 IntelliSense 模式
这两个选项。
编译器路径
从下拉框中选择 Clang/GCC 可执行文件对应的路径。
Clang 的路径示例
/usr/bin/clang
或者 /usr/bin/clang++
GCC 的路径示例
/opt/homebrew/Cellar/gcc/12.2.0/bin/g++
IntelliSense 模式
CPU – 编译器 – 选项
Intel – Clang – macos-clang-x64
Intel – GCC – macos-gcc-x64
Apple Silicon – Clang – macos-clang-arm64
Apple Silicon – GCC – macos-gcc-arm64
在 C/C++ 的配置页面设置好之后,VSCode 会为我们自动生成c_cpp_properties.json
文件。
c_cpp_properties.json 的示例
{"configurations": [{"name": "Mac","includePath": ["${workspaceFolder}/**"],"defines": [],"macFrameworkPath": ["/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"],"compilerPath": "/usr/bin/clang","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "macos-clang-arm64"}],"version": 4
}
tasks.json
在 tasks.json 中,我们会定义一个编译可执行文件的任务,
我们可以通过 VSCode 来自动生成这个文件,只要在 C++ 源文件中按下 F5,选择对应的选项(Clang 选择编译器 Clang++,GCC 选择编译器 G++),就会生成这个文件。
tasks.json 的示例
{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "生成活动文件","command": "/usr/bin/clang++","args": ["-fcolor-diagnostics","-fansi-escape-codes","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "编译器: /usr/bin/clang++"}]
}
launch.json
在 launch.json 中我们将设置调试相关的内容。
在之前生成 tasks.json 的同时,也会自动生成这个文件。这个文件的 type 一般会设置为 cppdbg。为了使用 CodeLLDB,建议将其改成 lldb
launch.json 的示例(cppdbg)
{"version": "0.2.0","configurations": [{"name": "生成和调试活动文件","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": true,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true, // 推荐设置为 true,否则在调试过程中无法接受输入"MIMode": "lldb","preLaunchTask": "生成活动文件"}]
}
launch.json 的示例(lldb)
{"version": "0.2.0","configurations": [{"name": "生成和调试活动文件","type": "lldb","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"cwd": "${workspaceFolder}","preLaunchTask": "生成活动文件"}]
}
⚠️注意:请确保launch.json 中 preLaunchTask 的值和 tasks.json 中的 label 保持一致。