2015-08-08 115 views
2

假设我有分为几个较小的文件,一个C程序,包括相互如下:编译顺序和编译的依赖

Taken from http://www.cs.cf.ac.uk/Dave/C/node3.html

现在我有以下的疑问,因为我正确到什么程度。请纠正我在哪里我错了:

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

main.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 and process2.c?

+0

文件'output.c'不能为代码的其余部分提供任何有用的服务,因为没有声明它提供给其他文件的函数的头文件。所以,问题描述中存在一个错误。 'output.c'应该包含'process1.h',或者'output.c'包含一个'output.h'头文件和一个或多个其他源文件。 –

回答

0

我认为你的问题的最佳答案是编写一个Makefile,然后检查哪些文件被编译后,改变你的问题。

+0

也许你可以添加一个关于如何执行此操作的示例,以便计算依赖关系。 – juanchopanza

+0

不,这是在尝试创建Makefile之前应该了解的一个非常基本的问题。你需要知道如何回答这个问题,然后才能知道你的Makefile是否正常工作。 –

+0

我同意你的意见,这是我理解的基础。也许对于那些有一些不同结果的人来理解,编写一个Makefile可以更好地理解变更后文件的编译方式。 – alifirat

3

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

  1. process1.c
  2. process1.c,main.c中
  3. process2.c,Input.c中
0

简单地说:

的文件必须重新编译,如果它依赖的任何文件已被更改。

注意,这是递归的,所以如果目标文件已经改变,因为他们已经重新编译,程序文件(通常所依赖的所有目标文件)必须重新构建(即链接,不编译)也是如此。

你可以尝试SCons作为一个更好,更强大的替代良好的醇做。