对学习模板的解释#

对整个项目的解释就不做了, 以下为一些学习模板的说明, 建议从上到下依次阅读.

要想进阶, 请参考 C++ 和 CMake 的学习建议.

学习模板根目录
|
+-- .clang-format
+-- .clang-tidy
+-- .clangd
+-- compile_commands.json
+-- CMakeLists.txt
+-- .cache/
+-- cmake/
|   +-- add_program.cmake
|   +-- cpp_novice_fetch_project_options.cmake
|   +-- cpp_novice_project_options.cmake
|
+-- .vscode/
    +-- tasks.json
    +-- launch.json

学习模板#

cpp_novice, ppp2_noviceppp3_novice 实际上是泛用的, 任何支持 CMake 的软件均可使用.

例如, Visual Studio 2022 可以用以下任意一种方式使用该文件:

  • 解压后按文件夹打开最里面的 cpp_novice 文件夹.

  • 或解压后按 CMake 项目打开 CMakeLists.txt 文件.

.clang-format#

代码 自动格式化 工具 clang-format 的配置文件.

.clang-tidy#

代码检查工具 clang-tidy 的配置文件, 辅助程序员写更优秀的代码.

项目的 .clang-tidy 配置文件中还提供了一个如何强制使命名满足特定格式的示例 (lower_case, CamelCase 等), 从而说明 .clang-tidy 的一些检查是存在自定义设置的.

有关它所产生的警告的解释, 见于 关于黄色警告和删除线. 为了避免对新手产生太大影响, 我禁用了很多严格的警告.

.clangd#

clangd 的配置文件. clangd 让 VSCode 能够解析 C++ 代码, 并为程序员提供内联提示、语法高亮等辅助功能. 实际上, CLion、Qt Creator 等软件也是使用的 clangd.

clangd 为 VSCode 提供了 clang-tidy 支持, 将会在编写代码时实时调用 clang-tidy 进行静态检查. (但不支持某些 clang-tidy 功能如自动添加, 如果需要, 请通过 Clang-Tidy: fix current file 对当前源文件使用 clang-tidy.)

clangd 也为 VSCode 提供了 clang-format 支持, 因而在通过 Ctrl-SCommand⌘-S 或工具栏手动保存代码时, 代码将会被格式化.

compile_commands.json#

该文件在 CMake 进行配置操作后才生成, 存储源文件的编译信息, clangd 需要这些信息才能更好地解析代码和理清文件间的关系.

  • 根目录下的是该文件的快捷方式, 以供 clangd 找到该文件.

  • 由于 compile_commands.json 中只是分别存储单个源文件的编译信息, clangd 为了重构能作用于项目, 只能假设是源文件来自同一个项目, 故而重命名功能可能影响看似不相关的源文件. 这主要问题来源于 cpp_novice 为学习之便管理了大量不相干的项目, 实际项目中一般会使用名字空间来解决名字重复, 影响不大.

  • CMake 的学习可参考 C++ 和 CMake 的学习建议.

备注

CMake 默认情况下并不会生成 compile_commands.json, 只是我所提供的文件夹已经配置好了, 所以才生成. 具体请通过 C++ 和 CMake 的学习建议 学习 CMake 来了解.

CMakeLists.txt#

CMake 的项目配置文件, 整个项目所有程序都由它管理:

  • 它加载了 aminya/project_options, 我利用该仓库进行自定义, 使代码有了更多诊断.

  • 它生成 clangd 所需的 compile_commands.json, 从而让 clangd 正常进行代码解析.

  • 它接受 add_program(程序名 源文件1 源文件2...), 从而添加新的程序.

  • CMake 的学习可参考 C++ 和 CMake 的学习建议.

.cache/#

为了加快 clangd 的解析速度, 我在 .clangd 配置文件中为 clangd 启用了后台缓存, 而这些缓存存放在 .cache 文件夹中.

在有些情况下 (软件更新、源文件大幅变动……), 你可能需要删除该文件夹并重启 clangd (Ctrl-Shift-PCommand⌘-Shift-P 打开命令菜单, 输入 clangdr 以找到 clangd: Restart language server, 回车).

cmake/#

CMake 的分文件和一些脚本文件, 分文件会在 CMakeLists.txt 中用 include(文件) 包含, 相当于 C++ 中的 #include.

考虑到读者的环境和网络条件,与我自用的版本有些差异.

add_program.cmake#

为新手使用 CMake 进行简单包装, add_program(程序名 源文件1 源文件2...) 即可添加新的程序.

cpp_novice_fetch_project_options.cmake#

获取 aminya/project_options 开源项目, 加入该项目允许使用者以较为简单的方式在 CMake 上配置 C++ 工具链.

cpp_novice_custom_project_options.cmake#

aminya/project_options 进行自定义设置.

  • 禁止 clang-tidy、cppcheck 等代码检查工具随程序编译而自动进行, 因为它们让编译变的过慢了; clangd 将会在编写代码时实时使用 clang-tidy 进行静态检查. (但不支持某些 clang-tidy 功能如自动添加, 如果需要, 请通过 Clang-Tidy: fix current file 对当前源文件使用 clang-tidy.)

  • 禁用文档生成工具.

  • 启用更多的编译器诊断选项, 这些选项会被保存到 compile_commands.json 中, 提供给 clangd 进行解析.

.vscode/#

该文件夹特定的 VSCode 配置, 仅在当前文件夹下有效.

tasks.json#

该文件夹下能使用的任务, 如编译源文件等, 目前配置有:

Clang-Tidy: fix current file

使用 clang-tidy 修复当前文件.

launch.json#

该文件夹下能使用调试任务, 用于 调试, 目前配置有:

LLDB: debug the active target

使用 LLDB 软件对 CMake 当前预运行的目标 进行调试, 在此即对选择的 C++ 程序进行调试.

CMake: debug configuration

对 CMake 的配置即 CMakeLists.txt 进行调试.

CMake: clean and debug configuration

清理之前的 CMake 配置缓存, 并对 CMake 的配置即 CMakeLists.txt 进行调试.