Разбор шаблона .gitignore для C++
Почему C++.gitignore игнорирует объектные файлы, библиотеки, исполняемые файлы, дерево сборки CMake, compile_commands.json и папку установки vcpkg, и в чём ловушка правила Makefile.
C++.gitignore к правилам для артефактов компиляции, похожим на шаблон C, добавляет дерево сборки CMake, результаты CTest и папку установки vcpkg в режиме манифеста. В репозитории шаблонов шаблон Fortran прямо ссылается на этот файл, поэтому в нём есть и правила для файлов модулей Fortran (.mod, .smod).
Осторожнее всего нужно быть со строкой Makefile. Правило задумано для блокировки Makefile, сгенерированных CMake, но в проекте, который собирается написанным вручную 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Блокирует Makefile, созданные генератором Unix Makefiles из CMake внутри дерева исходников. Слэша нет, поэтому 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, правило
cmake-build-*/из шаблона JetBrains блокирует папки сборки IDE.
Исходный шаблон
# 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