从 terminal 窗口,创建一个叫做 projects
的空文件夹来存储 VS Code 项目。然后创建一个叫做 helloworld
的子文件夹,导航到里面后,输入最下面的命令打开 VS Code:
mkdir projects cd projects mkdir helloworld cd helloworld code .
code .
命令打开当前文件夹下的 VS Code,也就是 ”workspace“。在该 workspace 内的 .vscode
文件夹下会创建三个文件:
tasks.json
(compiler build 设置)launch.json
(debugger 设置)c_cpp_properties.json
(compiler path and IntelliSense 设置)创建文件 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; }
在 helloworld.cpp
文件中,将鼠标悬停在 vector
或 string
上查看类型信息。在申明 msg
变量后面,开始输入 msg.
。这时看到一个显示所有成员函数的补全列表,以及一个显示 msg
对象类型信息的窗口:
按 Tab
键插入选中的成员。然后,当添加开括号时,会看到关于函数所需参数的信息。
这时需要创建一个 tasks.json
文件来告诉 VS Code 如何构造(搭建)该程序。这个文件会唤醒 g++ 编译器,并从源代码创建一个可执行文件。
在编辑器中打开 helloworld.cpp
非常重要,因为下一步将使用上下文编辑器中的活跃文件来创建下一步的构建任务:
在主菜单中,选择 Terminal > Configure Default Build Task。下拉菜单显示了C++编译器的各种预定义构建任务,这里选择 C/C++: g++ build active file。
这里会在 .vscode
文件夹内创建一个 tasks.json
文件并在编译器内打开它。这时的 tasks.json
文件看起来应该跟下面的 JSON 相似:
{ "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++ build active file", "command": "/usr/bin/g++", "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"], "options": { "cwd": "/usr/bin" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true } } ] }
可以在variables reference了解更多关于
task.json
变量。
command
设置指定要运行的程序;在本例中,使用的是 g++。args
数组指定将传递给 g++ 的命令行参数。这些参数必须按照编译器期望的顺序指定。
这个文件告诉 g++ 获取 active file(${file}
),编译它,并在当前目录(${fileDirname}
)中创建一个与 active file 同名但没有扩展名(${fileBasenameNoExtension}
)(比如.exe等)的可执行文件,从而得到示例中的 helloworld
。
label
的值是会在 tasks list 中看到的,可以给它随便命名。
group
对象中的 "isDefault": true
值指定该任务将在按下 Ctrl+Shift+B 时运行。这个属性只是为了方便;如果你设置为 false,仍然可以从终端菜单的 Tasks: Run Build Task 运行它。
helloworld.cpp
。现在的任务是搭建 active file,这时想要搭建 helloworld.cpp
。tasks.json
内的 build task,按下 Ctrl+Shift+B 或者从主菜单 Terminal 选择 Run Build Task。helloworld
文件夹作为工作目录。运行 ls
,应该看到可执行文件 helloworld
(没有文件扩展名)。./helloworld
在终端运行 helloworld
。也可以修改 tasks.json
文件,用 "${workspaceFolder}/*.cpp"
替代 ${file}
来构建多个 C++ 文件。也可以通过用硬编码的文件名(例如helloworld.out)替换 "${fileDirname}/${fileBasenameNoExtension}"
来修改输出文件名。