对学习模板的解释#
对整个项目的解释就不做了, 以下为一些学习模板的说明, 建议从上到下依次阅读.
要想进阶, 请参考 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_novice 或 ppp3_novice 实际上是泛用的, 任何支持 CMake 的软件均可使用.
例如, Visual Studio 2022 可以用以下任意一种方式使用该文件:
解压后按文件夹打开最里面的 cpp_novice 文件夹.
或解压后按 CMake 项目打开 CMakeLists.txt 文件.
.clang-format#
代码 自动格式化 工具 clang-format 的配置文件.
文档见 Clang-Format 配置选项列表.
.clang-tidy#
代码检查工具 clang-tidy 的配置文件, 辅助程序员写更优秀的代码.
项目的 .clang-tidy 配置文件中还提供了一个如何强制使命名满足特定格式的示例 (lower_case, CamelCase 等), 从而说明 .clang-tidy 的一些检查是存在自定义设置的.
有关它所产生的警告的解释, 见于 关于黄色警告和删除线. 为了避免对新手产生太大影响, 我禁用了很多严格的警告.
此处 clangd 将
.clang-tidy
和.clangd
中的配置文件综合处理.文档见 Clang-Tidy 诊断选项列表 和 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-S 或 Command⌘-S 或工具栏手动保存代码时, 代码将会被格式化.
文档见 Clang-Tidy 诊断选项列表 和 Clangd 官网.
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-P 或 Command⌘-Shift-P 打开命令菜单, 输入 clangdr
以找到 , 回车).
cmake/#
CMake 的分文件和一些脚本文件, 分文件会在 CMakeLists.txt
中用 include(文件)
包含, 相当于 C++ 中的 #include
.
考虑到读者的环境和网络条件,与我自用的版本有些差异.
CMake 的学习可参考 C++ 和 CMake 的学习建议.
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 进行解析.这些诊断选项参考了 cppbestpractices: Use the Tools Available - compilers 和 hacking C++: Diagnostic Basics, 但为便于初学者学习, 部分非常严格的诊断未启用.
.vscode/#
该文件夹特定的 VSCode 配置, 仅在当前文件夹下有效.
tasks.json#
该文件夹下能使用的任务, 如编译源文件等, 目前配置有:
使用 clang-tidy 修复当前文件.
launch.json#
该文件夹下能使用调试任务, 用于 调试, 目前配置有:
使用 LLDB 软件对 CMake 当前预运行的目标 进行调试, 在此即对选择的 C++ 程序进行调试.
对 CMake 的配置即
CMakeLists.txt
进行调试.清理之前的 CMake 配置缓存, 并对 CMake 的配置即
CMakeLists.txt
进行调试.