菜单

C 和 C++

相关源文件

目的与范围

本文档介绍了 C 和 C++ 编程语言的 gitignore 模板。它解释了这些模板排除的各种文件模式以及为什么应该将它们排除在版本控制之外。这些模板旨在通过忽略构建工件、二进制文件和其他生成的文件,帮助开发人员在处理 C 和 C++ 代码库时维护干净的存储库。

有关 Visual Studio 等特定于语言的 IDE 的信息,请参阅 Visual Studio 和 .NETJetBrains IDE

C 和 C++ 构建过程概述

了解 C 和 C++ 的构建过程有助于解释为什么某些文件需要排除在版本控制之外。

来源:C.gitignore4-43(). C++.gitignore4-32()

C 和 C++ 模板中的常见文件模式

由于它们的构建过程相似,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 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++ 特有的 Gitignore 模式

C++ 模板中有几个独特的模式

C++ 特有的对象文件

# Compiled Object files
*.slo
*.lo

这些是 C++ 编译特有的,尤其是在使用 libtool 时。

来源:C++.gitignore4-6()

Fortran 模块文件

# Fortran module files
*.mod
*.smod

包含这些模式是因为 Fortran 代码经常与 C++ 项目集成,尤其是在科学和数值计算领域。

来源:C++.gitignore19-22()

使用 C 和 C++ Gitignore 模板的最佳实践

处理 C 和 C++ 项目时,请考虑以下建议:

  1. 选择合适的模板:对纯 C 项目使用 C 模板,对 C++ 项目使用 C++ 模板。
  2. 与特定于 IDE 的模板结合使用:为了获得更全面的覆盖,请将这些模板与来自开发环境模板的特定于 IDE 的模板结合使用。
  3. 为您的构建系统自定义:您可能需要为您的构建系统(CMake、Make 等)添加特定模式。
  4. 包含特定于操作系统的模式:考虑添加来自特定于操作系统的模式的模式,以捕获您的操作系统创建的临时文件。

与常用构建系统的集成

此图说明了 C/C++ gitignore 模板如何与常用构建系统集成

来源:C.gitignore1-43(). C++.gitignore1-32()

结论

C 和 C++ gitignore 模板提供了将构建工件和生成的文件排除在版本控制之外的基本模式。通过理解构建过程和每种被排除的文件类型的角色,开发人员可以维护更干净的存储库,并避免提交可以从源文件重新生成的无关文件。

使用这些模板时,请记住根据您的特定项目需求自定义它们,并考虑根据您的开发环境和操作系统将它们与其他相关模板结合使用。