github/gitignore · C++.gitignore
C++ .gitignore 模板详解
说明 C++.gitignore 忽略目标文件、库、可执行文件以及 CMake 构建树、compile_commands.json、vcpkg 安装目录的原因,以及 Makefile 规则的陷阱。
C++.gitignore 在与 C 模板类似的编译产物规则之外,还包含 CMake 构建树、CTest 结果以及 vcpkg 清单模式的安装目录。由于模板仓库中的 Fortran 模板直接指向这个文件,其中也包含 Fortran 模块文件(.mod、.smod)的规则。
最需要小心的是 Makefile 这一行。它本意是拦截 CMake 生成的 Makefile,但如果项目用手写的 Makefile 构建,这个文件也会被忽略。
逐条规则详解
| 模式 | 忽略什么,为什么忽略 |
|---|---|
*.o*.obj*.slo*.lo*.d*.gch*.pch | 目标文件与头文件缓存每个翻译单元的编译结果、依赖文件和预编译头。都可以从源码重新生成。 |
*.so*.dylib*.dll*.so.**.a*.lib*.lai*.la*.exe*.out*.app | 库与可执行文件链接产物。不同平台生成的结果不同,因此应通过发布而不是仓库分发。 |
build/Build/build-*/CMakeFiles/CMakeCache.txtcmake_install.cmakeinstall_manifest.txt | CMake 构建树CMake 在配置阶段生成的缓存和生成文件。CMakeCache.txt 中保存了本机的编译器路径,对其他人没有用处。 |
Makefile | 生成的 Makefile拦截 CMake 的 Unix Makefiles 生成器在源码树中生成的 Makefile。由于没有斜杠,任意深度的 Makefile 都会被忽略。 |
compile_commands.jsonvcpkg_installed/Testing/.cache/ | 工具产物clangd 等读取的编译数据库、vcpkg 安装的包、CTest 结果以及 clangd 索引缓存。它们都随本地环境而变化。 |
*.pdb*.ilk*.dwo*.tmp*.log*.bak*.swp | 调试信息与临时文件调试符号、增量链接文件,以及编辑器的临时和备份文件。 |
*.mod*.smod | Fortran 模块Fortran 编译器生成的模块接口文件。对纯 C++ 项目没有影响。 |
实践中的注意事项
- 如果有手写的
Makefile,请添加!/Makefile或针对该路径的例外规则。把Makefile路径放进模式测试器检查一下,马上就能看出来。 - 有些团队会在根目录放一个
compile_commands.json的符号链接来共享。这种情况下请删除这一行。 vcpkg.json(清单)和vcpkg-configuration.json不属于忽略对象,应当提交。- 如果使用 CLion,JetBrains 模板中的
cmake-build-*/规则会拦截 IDE 的构建目录。
原始模板
C++.gitignore
# Prerequisites*.d# Compiled Object files*.slo*.lo*.o*.obj# Precompiled Headers*.gch*.pch# Linker files*.ilk# Debugger Files*.pdb# Compiled Dynamic libraries*.so*.dylib*.dll*.so.*# Fortran module files*.mod*.smod# Compiled Static libraries*.lai*.la*.a*.lib# Executables*.exe*.out*.app# Build directoriesbuild/Build/build-*/# CMake generated filesCMakeFiles/CMakeCache.txtcmake_install.cmakeMakefileinstall_manifest.txtcompile_commands.json# Temporary files*.tmp*.log*.bak*.swp# vcpkgvcpkg_installed/# debug information files*.dwo# test output & cacheTesting/.cache/
模板来源: github/gitignore/C++.gitignore @356fd7b (2026-09-11) · CC0-1.0