在 Ubuntu 22.04 下使用 Visual Studio Code (VS Code) 创建一个新的 C++ 项目(如 MyProject),你可以按照以下步骤进行。这个过程会包含创建项目目录、编写代码、配置 CMake 和 VS Code 相关的文件等。

完整的项目创建和配置步骤

步骤 1:创建项目目录结构

  1. 打开终端,创建项目文件夹 MyProject

    1
    2
    mkdir ~/MyProject
    cd ~/MyProject
  2. 创建项目的基本目录结构:

    1
    mkdir src include build
    • src/:存放源文件(.cpp 文件)。
    • include/:存放头文件(.h 文件)。
    • build/:存放编译过程中生成的文件。
  3. 创建一个 main.cpp 和头文件 mylib.h,以及一个源文件 mylib.cpp

    1
    touch src/main.cpp src/mylib.cpp include/mylib.h

image-20241009193125747

步骤 2:编写代码

编辑 src/main.cpp 文件:

src/main.cpp

1
2
3
4
5
6
7
8
#include <iostream>
#include "mylib.h"

int main() {
std::cout << "Hello, CMake Project!" << std::endl;
myFunction();
return 0;
}

编辑 src/mylib.cpp 文件:

src/mylib.cpp

1
2
3
4
5
6
#include <iostream>
#include "mylib.h"

void myFunction() {
std::cout << "This is a function from mylib." << std::endl;
}

编辑 include/mylib.h 文件:

include/mylib.h

1
2
3
4
5
6
#ifndef MYLIB_H
#define MYLIB_H

void myFunction();

#endif

步骤 3:编写 CMakeLists.txt

在项目根目录下创建 CMakeLists.txt 文件:

1
touch CMakeLists.txt

然后编辑 CMakeLists.txt 文件,内容如下:

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cmake_minimum_required(VERSION 3.16)
project(MyProject)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)

# 包含头文件目录
include_directories(include)

# 添加源文件
set(SOURCES
src/main.cpp
src/mylib.cpp
)

# 生成可执行文件
add_executable(MyProject ${SOURCES})

这个 CMake 配置文件做了以下工作:

  • 设置项目名为 MyProject
  • 设置 C++17 作为项目的编译标准。
  • 指定头文件的目录为 include
  • 列出项目中的源文件。
  • 生成可执行文件 MyProject

image-20241009193335449

步骤 4:在 VS Code 中打开项目

  1. 启动 VS Code,然后打开 MyProject 文件夹:

    1
    code ~/MyProject
  2. 如果尚未安装 CMake Tools 插件,按 Ctrl+Shift+X 搜索并安装 CMake Tools 插件。

  3. VS Code 会检测到 CMakeLists.txt 文件,并在左下角显示 CMake 相关的选项。

步骤 5:配置 CMake 和编译项目

  1. Ctrl+Shift+P 打开命令面板,输入并选择 CMake: Configure
    • 第一次运行时,VS Code 会询问你选择哪种编译器。选择 GCC 或适合你的系统的编译器。
  2. 配置完成后,按 Ctrl+Shift+P,选择 CMake: Build 来编译项目。
    • 编译完成后,会在 build/ 目录中生成可执行文件 MyProject

image-20241009194101699

步骤 6:调试配置

  1. 进入 .vscode 文件夹,创建或编辑 launch.json 文件:

    1
    2
    mkdir .vscode
    touch .vscode/launch.json
  2. 编辑 launch.json 文件,内容如下:

image-20241009194228563

.vscode/launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/MyProject",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "CMake: build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
  • program 字段指定要调试的可执行文件路径。
  • preLaunchTask 设置为 CMake: build,表示在调试之前会先编译项目。
  1. F5 启动调试,会编译并运行项目。你应该在终端中看到输出:

    1
    2
    Hello, CMake Project!
    This is a function from mylib.

image-20241009194331027

步骤 7:手动编译和运行(可选)

如果你想在不使用 VS Code 内置的 CMake 配置的情况下编译,可以在终端中手动执行:

1
2
3
4
cd ~/MyProject/build
cmake ..
make
./MyProject
  • 这将会在 build/ 目录下生成 Makefile 并编译 MyProject
  • ./MyProject 将会运行生成的可执行文件。

image-20241009194711028

总结

  • 创建项目结构src 目录存放源文件,include 目录存放头文件,build 目录用于生成编译文件。
  • 编写 CMakeLists.txt:用于定义项目的编译配置。
  • 配置 VS Code 的 CMake Tools:自动化编译和调试过程。
  • 调试配置(launch.json):为调试提供正确的路径和配置。

在实际的 C++ 项目开发过程中,尤其是涉及多个项目或者经常切换不同项目的情况,有一些配置文件是经常需要修改的。这些文件通常用于管理项目结构、编译选项、库的依赖等。以下是常见的配置文件以及它们的用途:

1. CMakeLists.txt

如果你使用 CMake 来管理项目,那么 CMakeLists.txt 是最需要修改的文件之一。它定义了项目的编译方式、包含的文件、依赖的库等。以下是一些经常需要修改的部分:

  • 项目名称和版本

    1
    project(MyProject VERSION 1.0)

    在创建新项目或复制旧项目时,需要修改项目名称和版本。

  • 源文件和头文件

    1
    2
    3
    4
    set(SOURCES
    src/main.cpp
    src/mylib.cpp
    )

    每当你添加或删除源文件时,SOURCES 列表需要更新。

  • 包含目录

    1
    include_directories(include)

    如果添加新的头文件目录(如新的模块或第三方库),需要在 include_directories 中进行更新。

  • 编译选项

    如果项目有特殊的编译选项需求,例如启用某些编译器警告或调试选项,需要调整 CMakeLists.txt 中的编译选项:

    1
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -O2")
  • 添加库依赖

    如果项目依赖于第三方库或者你自己编写的静态库或动态库:

    1
    target_link_libraries(MyProject PRIVATE MyLibrary)

    每次添加或移除库时需要调整这里的配置。

2. launch.json(VS Code 调试配置)

launch.json 是 VS Code 中用于调试的配置文件。每当你创建一个新项目或更改可执行文件的位置时,都需要更新这个文件。常见需要修改的部分包括:

  • 程序路径

    1
    "program": "${workspaceFolder}/build/MyProject"

    如果项目名称改变,或者可执行文件位置改变,需要修改这个路径。

  • 工作目录

    1
    "cwd": "${workspaceFolder}"

    如果工作目录发生变化(比如项目的根目录改变),则需要更新 cwd 字段。

  • 调试前的编译任务

    如果更改了编译任务的名称,需要同步更新 preLaunchTask

    1
    "preLaunchTask": "CMake: build"

3. tasks.json(VS Code 编译配置)

tasks.json 是 VS Code 中用于配置编译任务的文件。在项目发生变化时,以下几项可能需要修改:

  • 编译目标文件

    如果项目生成的可执行文件或输出文件名改变,需要修改 args 中的 -o 参数:

    1
    "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"]
  • 编译器路径

    如果切换了不同版本的编译器,或者项目需要特定版本的编译器,可能需要修改 command 字段:

    1
    "command": "/usr/bin/g++-10"

4. .gitignore

如果项目使用 Git 进行版本控制,.gitignore 文件也是经常需要修改的配置文件。它用于指定哪些文件或目录不应被 Git 追踪。常见的修改包括:

  • 忽略编译生成的文件

    1
    2
    build/
    *.o

    每次更改项目的输出目录时,可能需要更新 .gitignore 文件。

  • 忽略 VS Code 配置文件

    1
    .vscode/

    如果不希望将 VS Code 的配置提交到版本库,也可以在这里进行忽略。

5. 项目 README 和文档

在项目开发过程中,README.md 或其他项目文档也经常需要更新,特别是在项目结构或依赖发生变化时。需要修改的内容包括:

  • 项目描述:当项目功能有较大变化时,需要更新描述。

  • 编译和运行指南:例如,使用 cmake 进行构建的命令步骤:

    1
    2
    3
    4
    5
    mkdir build
    cd build
    cmake ..
    make
    ./MyProject
  • 依赖列表:当添加或移除依赖时,需要更新这些依赖的安装步骤或说明。

6. settings.json(VS Code 配置)

settings.json 文件是 VS Code 的用户设置或工作区设置文件。在项目切换时,可能需要调整一些特定的配置:

  • 代码格式化工具:如 clang-format 的路径。

    1
    "C_Cpp.clang_format_path": "/usr/local/bin/clang-format"
  • 特定项目的编译配置:如果某些项目有特殊的 include 路径,可以在 settings.json 中进行设置:

    1
    "C_Cpp.includePath": ["${workspaceFolder}/include", "/usr/local/include"]

总结

在多项目开发过程中,以下是经常需要修改的配置文件:

  • CMakeLists.txt:管理项目构建和编译,调整源文件、库依赖、头文件目录等。
  • launch.jsontasks.json:VS Code 中的编译和调试配置,调整项目路径和调试选项。
  • .gitignore:忽略不需要追踪的文件。
  • README.md:更新项目描述、依赖和使用方法。
  • settings.json:VS Code 的用户配置,设置与项目相关的编辑器行为。