本文档介绍了 C 和 C++ 编程语言的 gitignore 模板。它解释了这些模板排除的各种文件模式以及为什么应该将它们排除在版本控制之外。这些模板旨在通过忽略构建工件、二进制文件和其他生成的文件,帮助开发人员在处理 C 和 C++ 代码库时维护干净的存储库。
有关 Visual Studio 等特定于语言的 IDE 的信息,请参阅 Visual Studio 和 .NET 或 JetBrains IDE。
了解 C 和 C++ 的构建过程有助于解释为什么某些文件需要排除在版本控制之外。
来源:C.gitignore4-43(). C++.gitignore4-32()
由于它们的构建过程相似,C 和 C++ gitignore 模板共享许多常见模式。下表总结了被排除的主要文件类别
| 类别 | 文件模式 | 目的 | 包含于 |
|---|---|---|---|
| 先决条件 | *.d | 编译器生成的依赖文件 | 两者 |
| 对象文件 | *.o, *.obj | 链接前的编译源文件 | 两者 |
| 预编译头 | *.gch, *.pch | 预处理的头文件,用于加快编译速度 | 两者 |
| 库 | .a, .lib, .so, .dll, .dylib | 静态库和动态库 | 两者 |
| 可执行文件 | *.exe, *.out, *.app | 可执行的二进制文件 | 两者 |
| 调试文件 | *.pdb, *.idb, *.dSYM/, *.su | 包含调试信息的文件 | 主要是 C |
来源:C.gitignore1-43(). C++.gitignore1-32()
# Prerequisites
*.d
这些是编译器生成的依赖文件,列出了每个源文件依赖哪些头文件。它们用于确定何时需要重新编译文件,但不应进行版本控制。
来源:C.gitignore1-2(). C++.gitignore1-2()
C gitignore 包含
# Object files
*.o
*.ko
*.obj
*.elf
C++ gitignore 包含
# Compiled Object files
*.slo
*.lo
*.o
*.obj
对象文件是编译过程的中间输出。它们包含机器代码,但尚未链接到可执行文件或库。
来源:C.gitignore4-8(). C++.gitignore4-8()
两个模板都排除各种类型的库
.a, .lib (Unix/Windows).so (Unix), .dll (Windows), .dylib (macOS)库通常应该被排除,因为它们是可重新生成的构建工件,并且它们可能包含特定于平台的代码。
来源:C.gitignore19-29(). C++.gitignore23-27(). C++.gitignore15-17()
两个模板都排除可执行文件
# Executables
*.exe
*.out
*.app
C 模板还排除了特定于体系结构的二进制文件
*.i*86
*.x86_64
*.hex
来源:C.gitignore31-37(). C++.gitignore29-32()
下图说明了 C 和 C++ gitignore 模板之间的区别和相似之处
来源:C.gitignore1-52(). C++.gitignore1-32()
C gitignore 模板包含几个 C++ 模板中没有的模式,特别是一些与以下相关的模式:
# Linker output
*.ilk
*.map
*.exp
这些是链接过程中产生的中间文件。
来源:C.gitignore10-13()
# Debug files
*.dSYM/
*.su
*.idb
*.pdb
调试文件包含调试器使用的信息,但对于程序执行并非必需,也不应在版本控制中跟踪。
来源:C.gitignore39-43()
C gitignore 独有地包含内核模块开发的模式
# Kernel Module Compile Results
*.mod*
*.cmd
.tmp_versions/
modules.order
Module.symvers
Mkfile.old
dkms.conf
这些模式特定于 Linux 内核模块开发,而 Linux 内核模块开发主要使用 C 语言。
来源:C.gitignore45-52()
C++ 模板中有几个独特的模式
# Compiled Object files
*.slo
*.lo
这些是 C++ 编译特有的,尤其是在使用 libtool 时。
来源:C++.gitignore4-6()
# Fortran module files
*.mod
*.smod
包含这些模式是因为 Fortran 代码经常与 C++ 项目集成,尤其是在科学和数值计算领域。
来源:C++.gitignore19-22()
处理 C 和 C++ 项目时,请考虑以下建议:
此图说明了 C/C++ gitignore 模板如何与常用构建系统集成
来源:C.gitignore1-43(). C++.gitignore1-32()
C 和 C++ gitignore 模板提供了将构建工件和生成的文件排除在版本控制之外的基本模式。通过理解构建过程和每种被排除的文件类型的角色,开发人员可以维护更干净的存储库,并避免提交可以从源文件重新生成的无关文件。
使用这些模板时,请记住根据您的特定项目需求自定义它们,并考虑根据您的开发环境和操作系统将它们与其他相关模板结合使用。