在 Mac 的 VSC 中使用 g++ 编译器
本人最近开始复习算法刷题了,然后用的是 macOS 上 VSCode 的默认配置,也就是 clang/clang++ 编译器,但是高中的时候用惯了 gcc/g++ 了,很多 g++ 的方言 clang 并不支持,例如 #include <bits/stdc++.h>
之类的
可能你会说,这有什么的,直接把编译指令里面的编译器替换一下不就行了
如果真的这么简单的话就没有这篇博客了(bushi
首先我换了之后并不能解决问题, 接着我发现了一个很恐怖的事情(
我的 gcc 怎么被 clang 夺舍了???
我的第一个反应是卸载 clang ,毕竟我也不想用这玩意,然后我看这东西是哪里安装的
1 | whereis clang |
啊,原来是 Xcode 哇,这东西我平时也用不上,还占着这么大的空间,我这就把你卸了
Xcode 是我刚开始上手 macOS 的时候学长建议我安装的,但是这东西快15个G,我平时又用不上
卸完之后我发现 clang 还是在,我就继续看
1 | whereis clang |
原来是 CommandLineTools ,我又搜了一下这个 CommandLineTools 是个什么东西,原来是 Xcode 开发环境的一部分,但是其实可以不依附 Xcode 单独存在
学长让我安装 Xcode 其实就是为了安装这个东西,其实这个东西通过这个命令就能安装
1 | xcode-select --install |
好了,现在的目标是解决这个东西,但是我 Google 了一下,却发现这东西我还不能卸了
好家伙,我直呼内行
是的,我的确使用 brew install gcc
安装了 gcc和g++,但是我一直不知道怎么调用
现在我知道了,原来要加上你的版本号才能调用到 gcc 本尊
行吧,我这就去手动指定编译器路径
先看看这东西的路径
1 | whereis g++-12 |
然后去改 .vscode
下的 tasks.json
1 | { |
顺便把
launch.json
也记录一下把,这两个文件一个是定义如何编译的,一个是定义怎么运行的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 {
"version": "0.2.0",
"configurations": [
{
"name": "g++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb"
}
]
}PS:顺便说一下这个
externalConsole
,在 Windows/Linux 上我用 C/C++ 扩展运行的时候都能把标准输出打印到集成终端上,但是在 macOS 上死活不可以,后来仔细一看原来打到了调试控制台上,如果我把这东西改为 true 的时候,它又会弹出一个终端出来,很难受后来一看文档才知道真的没法像 Windows/Linux 一样使用集成终端输入输出
最后一想,算了,我 Windows/Linux 上一般都是用文件输入的
1
2
3
4
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);记着调试的时候把 output 那行注释调然后去调试控制台看输出吧
改完之后我发现我的包导入不了了(后来知道原来的包都是 Xcode 里面的),我又想看看 g++的 lib 路径,这一般和 g++ 是放在一起的
然后发现是个软连接
然后我翻了一下,是在这个位置
1 | /opt/homebrew/Cellar/gcc/12.2.0/lib/ |
去扩展设置里面手动指定一下
Compiler Path
和Include Path
发现可以用了,按住 cmd 点进去头文件,再次确认路径
这时群里说其实可以用 alias
,我一想的确啊,毕竟 alias
的优先级是最高,这下可以给 gcc 正名了
直接进 ~/.zshrc
敲上两行
1 | alias g++='g++-12' |
然后我使用 Code Runner 快速运行的时候会遇到错误,一想是C++标准的问题,我又去扩展设置手动改调用参数
最后我还想让 Code Runner 支持从集成终端输入输出,我有时也会从终端手动输入数据的
现在终于可以愉快地 Coding 了!按下 Code Runner 的快捷键,自动从 input.txt
读取并输出到 output.txt
中
当我需要调试的时候, 把重定向 output 的那行注释掉,然后到调试控制台观察输出