2011-12-07 61 views
0

當我編輯一個源文件時,是否運行make重新編譯該文件以及該文件是哪個文件是依賴項?如果是這樣,爲什麼?當我更改一個文件時,爲什麼'make'會重新編譯多個文件?

+0

請發佈[最小樣本](http://sscce.org/)。沒有看到你在問什麼,就不可能回答問題。 – outis

+0

我認爲任何對make實用程序有很好理解的人都會發現可以回答。 – Rooster

+0

提供示例代碼的目的是澄清和明確指出你在說什麼。技術是一件微妙的事情;微小的差異會產生巨大的後果。沒有具有代表性的示例,回答者只能猜測特定的makefile中發生了什麼。您可能無法以最佳方式構建事物。你爲什麼不利於[改善你的問題](http://tinyurl.com/so-hints)? – outis

回答

4

爲什麼?
因爲這是有一個Make文件的全部目的。
如果修改了某個特定的源文件,則應該使用修改後的文件重新編譯所有依賴文件,以便所有相關文件都引用相同的源並且整個代碼庫同步。

如何?
make實用程序檢查時間戳以檢查哪些文件被修改。創建make文件時需要指定依賴關係規則,它明確告訴實用程序哪些其他文件依賴於特定文件。因此,使用這些規則編譯所有依賴文件,以便生成的二進制文件引用相同的更新代碼。

+0

好吧,爲什麼部分,幽默我的例子。文件A包含對文件B中定義的函數的調用。因此,如果我只是向文件B添加分號,make必須重新編譯A,因爲所有人都知道,A調用的函數簽名可能已更改? – Rooster

+0

@bbarre:是的,這是正確的。 –

+0

@bbarre:也許吧。如果B.h是*聲明*或*定義*函數的頭文件,並且A.cpp包含B.h,則B.h應該是A.o(或A或A.exe,無論您從A構建的)的依賴關係。但是,如果B.cpp是*定義函數的文件,而A.cpp在別處得到函數的聲明,那麼假設您將A.cpp和B.cpp分別編譯到Ao和Bo,那麼B.cpp不需要是Ao的依賴在那種情況下,A.o和B.o仍然依賴於你從它們構建的任何可執行文件。所以如果你改變B.cpp離開B.h一個人,B.o和exe被重建,那麼A.o不是。 –

0

當我編輯一個源文件時,是否運行make重新編譯該文件 加上那個是依賴關係的所有文件?如果是這樣,爲什麼?

它可能會發生一個壞的生成文件(你沒有發佈它如何看起來像)。

或者源文件包含模板的實現,幷包含在某處。

4

如果該文件包含在其他文件中,則期望其他文件重新編譯以及不希望程序的「一半」是新的,而另一半是「舊」的是合理的。

相關問題