2013-08-28 44 views
0

我正在處理涉及大量c++文件的項目。出於好奇,我在問這個問題。Makefile編譯所有文件,即使在單個C++文件中完成更改

通常在完成make之後,修改後的特定c++文件將單獨編譯爲後續make s。有時,我經歷了幾乎所有其他c++文件和最終可執行文件的單個c++文件結果編輯的小修改。

Makefile編譯其他未修改c++文件的原因是什麼?

+4

目標依賴關係。考慮在*目標上運行make,然後運行測試,看看爲什麼其他所有文件突然不符合規則。沒有看到makefile,其他任何事情都是純粹的猜測。 – WhozCraig

+4

我使用廉價替代品的透明塑料球說,它可能是17,43或68在你的makefile中是錯誤的。但那時我的塑料球不是很經常,所以我不會太注意。如果你發佈你的makefile文件,或者更好,做一個簡單的版本(但是確保它仍然存在相同的問題),然後發佈它,那可能會更好。 –

+1

@MatsPetersson我很嫉妒。我的塑料球通常很霧,一個真正的混蛋從中得到任何東西。你的清楚讓我感到難過=( – WhozCraig

回答

1

因此,makefiletimestamping的概念。比方說make規則是這樣的

output: dep1 
    rule-1 
dep1: dep2 
    rule-2 

當您執行makefile然後make首先檢查output文件的timestamp,(如果output文件默認情況下不執行規則,然後存在)。比如說output是在1200hrs創建的,並且您在1205hrs更改了文件dep1並執行make,然後make發現目標輸出早於其依賴dep1,因此它將執行規則1。如果假設output在1300小時創建,dep1在1230小時,現在您在1310小時更新dep2,並執行make。你可以在這裏看到,因爲dep1dep2更舊規則-2被執行並且dep1的時間戳被更改,output現在比dep1更早,所以執行規則-1。你可以在這裏看到,儘管output不直接依賴於dep2當你更新時它被重建dep2

這就是你的情況。檢查makefile並嘗試檢查您編輯的文件的依賴性。依賴於您編輯的文件的目標將被重建。

相關問題