C 编译顺序和编译依赖关系

C 编译顺序和编译依赖关系,c,gcc,C,Gcc,假设我有一个C程序,它被分成几个较小的文件,并包含彼此,如下所示: 现在我有以下疑问,我在多大程度上是正确的。无论我错在哪里,请纠正我: 1. Which files have to recompiled after I make changes to process1.c? 梅因c 2. Which files have to recompiled after I make changes to process1.h? main.c和process1.c 3. Which files h

假设我有一个C程序,它被分成几个较小的文件,并包含彼此,如下所示:

现在我有以下疑问,我在多大程度上是正确的。无论我错在哪里,请纠正我:

1. Which files have to recompiled after I make changes to process1.c?
梅因c

2. Which files have to recompiled after I make changes to process1.h?
main.c和process1.c

3. Which files have to recompiled after I make changes to list.h? 

input.c和process2.c?

我认为对你的问题最好的回答是写一个
Makefile
,然后在像你的问题一样修改文件后检查编译了哪些文件。

这真的很容易。如果X被更改,任何包含X(或是X)的.c文件都需要重新编译。答案是:

  • 过程1.c
  • 进程1.c,main.c
  • process2.c,input.c
  • 简言之:

    如果文件所依赖的任何文件已更改,则必须重新编译该文件

    请注意,这是递归的,因此,如果任何目标文件因重新编译而发生更改,则程序文件(通常取决于所有目标文件)也必须重新构建(即链接,而不是编译)


    您可以尝试将其作为一个更简单、更强大的好的ol'make的替代方案。

    也许您可以添加一个示例,说明如何执行此操作,从而计算依赖项。不,这是一个非常基本的问题,在尝试创建Makefile之前,您应该了解。你需要先了解如何回答这个问题,然后才能知道你的Makefile是否运行正常。我同意你的观点,这是我理解的一个基本问题。也许对于一个很难理解的人来说,最好编写一个Makefile,以了解更改后文件是如何编译的。关键是Makefile不会突然为您计算依赖项。文件
    output.c
    无法为代码的其余部分提供任何有用的服务,因为没有声明它提供给您的函数的头其他文件。所以,问题描述中有一个bug。
    output.c
    应该包括
    process1.h
    ,或者应该有一个
    output.h
    头,该头包含在
    output.c
    和一个或多个其他源文件中。