【问题标题】:How are github project compiled & arranged mainly C project on Githubgithub项目如何编译整理在Github上主要是C项目
【发布时间】:2014-11-06 22:21:54
【问题描述】:

我正在学习 C 编程语言。为了清楚地了解用 C 编写的大型项目有多大。我在 Github 上浏览了几个 Trending C 项目。这是用 C 语言编写的项目:Here。我不明白的一件事是为什么项目目录中有这么多文件夹:bin、conf、contrib、docs、images、m4、man、notes 等。我理解的唯一文件夹是 src 文件夹,其中包含所有头文件和c文件。但是还有一个与源文件夹有关的疑问。每个头文件都有一个同名的 C 文件。我可以编译主文件,但 main.c 文件如何链接到其他 C 文件。我猜其他 C 文件具有所有函数定义,主文件正在调用它们。 main.c 调用了包含所有功能原型的头文件。我现在对这些大项目管理有点困惑。请帮我理解。还有在哪里阅读它,以便我可以学习这些东西。

其实我想问的是:如果我有 5 个文件

main.c、header.h、function1.c、function2.c、function3.c。我如何使用在这 3 个 function1、2、3.c 文件中编写的 3 个函数。

我想学习如何构建一个大项目并在不同的文件中管理它,以及文件在 GIT 上的排列方式。即使我创建一个项目,我也会在同一个 .c 文件中写 1000 行,这完全是一团糟。我想学习如何管理项目的这种清晰性和安排。在哪里学习所有这些?

【问题讨论】:

    标签: c github


    【解决方案1】:

    我不明白的一点是为什么项目目录中有这么多文件夹:bin、conf、contrib、docs、images、m4、man、notes等。

    因为一个软件不仅仅包含源代码。需要很多补充的东西:

    • 文档(在/mandocs);
    • 构建脚本(通常用于事实上的标准 Unix 配置工具“autoconf”、“automake”、“M4”和“make”,位于 conf 和/或 m4 文件夹中);
    • GUI 使用的资源,如果程序有一个 (/images);

    我可以编译主文件,但是 main.c 文件是如何链接到其他 C 文件的

    使用称为链接器的软件。很多编译器(包括流行的 GCC 和 Clang 工具链)默认调用系统链接器(除非你告诉他们他们应该只编译而不是链接),然后解析源文件之间的引用并创建最终的可执行文件。阅读更多关于 C 编译过程的信息here

    我想学习如何构建一个大项目并在不同的文件中管理它,以及文件在 GIT 上的排列方式。在哪里学习所有这些?

    不幸的是,没有一个地方可以收集所有的智慧。您将需要大量使用 Google,阅读文档和手册以及构建系统(如 make)和版本控制系统(如 Git 等)的教程。

    但是,我为您找到了一个相关的 Stack Overflow 问题,应该可以帮助您入门:How to split a C program into multiple files?

    【讨论】:

    • 这是一个很好的答案!我会把我的留在这里(为什么不),但你先生刚刚赢得了我的支持:)
    • 伟大的帮助先生,非常感谢@TheParamagneticCroissant 如此简单的解释
    【解决方案2】:

    我会把我的两分钱放在这里。

    关于这个源文件:
    您可能已经知道有包含函数声明的头文件 (.h),您需要 #include 这样的文件才能从内部使用函数,但是如果您查看其中一个这样的头文件,您会注意到只有声明,没有定义。
    .c 文件解开了这个谜团:
    如果你有文件function.c 里面有一些函数,并且想在main.c 文件中使用这个函数,你需要为此创建头文件:function.h 它将包含来自function.c 的函数的声明(原型)文件。如果我没记错的话,你还需要#includefunction.c 文件中的这个标题。 然后您可以将#include 这样的标头添加到您的main.c 文件中并使用此功能。

    关于代码组织:
    有一些用于组织代码和项目管理的最佳实践和方法。有时,开发人员使用的 IDE 也有一些特殊的项目组织方式。
    只是为了澄清:git 本身并不强制执行任何特定的组织

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2016-03-19
      • 1970-01-01
      • 2020-09-07
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多