2015-08-08 117 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作爲一個更好,更強大的替代良好的醇做。