visual studio code mac使用
最近需要编写一些C/C++程序,由于体量都不是很大所以想要追求一个轻量化的编辑和编译环境,于是想起了在Dock栏吃灰的VSCode。通过查找资料,包括VSCode的官方文档,最终配置实现了Mac下基于VSCode的C/C++编辑环境搭建。
- 准备
在配置环境之前先检查一下机器上都安装了什么C++编译器,通过以下两条命令可以查看是否安装了g++/clang编译器,本人两种编译器都有装所以其结果如下图所示。
g++ --version
clang++ --version
出现
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
解决方法
在终端输入,会安装xcrun
xcode-select --install
继续验证,安装正确
g++ --version
clang++ --version
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
2.环境
然后回到VSCode去安装如下图所示的两款插件,以获得C++语法高亮、错误检查和调试等功能。
那么,前期准备工作完成后进入具体的配置阶段。首先在目录下新建一个文件夹作为工程目录,然后在VSCode中打开该文件夹。在里面新建一个cpp文件命名为main.cpp。随意写点程序在里面。
然后点击侧边栏的Debug按钮,点击设置图标,便会提示你选择环境,这里就选择C++那一项。
此时VSCode会在你的工程目录下自动新建一个.vscode的文件夹,并新建了一个launch.json的文件,这里需要对生成的文件进行一些小改动。本人配置如下:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb"
}
]
}
保存后按快捷键⇧⌘B编译,此时会出现提示没有找到要运行的生成任务,所以接下来将进行生成任务的配置工作,VSCode提供了一些模版,有需要的可以自行选择,这里就选则Others。
此时.vscode目录下会出现一个task.json文件,对它进行改写。本人配置如下:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "hello world",
"type": "shell",
"command": "clang++",
"args": [
"main.cpp"
],
"group": {
"kind":"build",
"isDefault": true
}
}
]
}
保存后再次按快捷键⇧⌘B就能够顺利编译了,编译完成后按F5执行,得到输出结果。
3.其他
每次编译完成后,我们会发现目录下多了一个a.out文件,这个文件是Linux/Unix环境下编译器编译源代码并连接产生的可执行文件,在未指定的情况下其默认命名为a.out。那么如何通过修改配置文件来修改这个文件的命名呢?
方法很简单,在task.json中的args属性下填入-o yourfilename.out,以本人的配置作为示例:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "hello world",
"type": "shell",
"command": "clang++",
"args": [
"-o app.out",
"main.cpp"
],
"group": {
"kind":"build",
"isDefault": true
}
}
]
}
可以发现这里的command和args两个属性就相当于在命令行中执行了clang++ -o yourfilename.out main.cpp,所以如果还有其他的需求也可以对这里进行改写。最后不要忘记修改launch.json中的program属性,将.out的文件名修改为与task.json一致。便可以成功编译执行了
- 编译多个cpp
如果有多个cpp,发现编译会出现
symbol(s) not found for architecture x86_64
经过大量分析发现
g++不会正确的编译其他的CPP文件,你可以看VSCode的命令:
g++ /Users/stanhu/Desktop/Git/Foundation/CPP_Learn/main.cpp -o /Users/stanhu/Desktop/Git/Foundation/CPP_Learn/main.out -g -Wall -fcolor-diagnostics -std=c++11
只编译了main.cpp文件而没有编译a.cpp文件,所以会出现symbols for architecture x86_64错误
所以正确的做法是:g++ main.cpp a.cpp -o main.out
再执行./main.out
在clion有cmakelist.txt,原本只有
cmake_minimum_required(VERSION 3.14)
project(audioprocessing2)
set(CMAKE_CXX_STANDARD 14)
add_executable(audioprocessing2 main.cpp)
增加后编译成功
cmake_minimum_required(VERSION 3.14)
project(audioprocessing2)
set(CMAKE_CXX_STANDARD 14)
add_executable(audioprocessing2 main.cpp a.cpp)
难道不能直接连接所有的c文件么?