我正在處理涉及大量c++
文件的項目。出於好奇,我在問這個問題。Makefile編譯所有文件,即使在單個C++文件中完成更改
通常在完成make
之後,修改後的特定c++
文件將單獨編譯爲後續make
s。有時,我經歷了幾乎所有其他c++
文件和最終可執行文件的單個c++
文件結果編輯的小修改。
Makefile
編譯其他未修改c++
文件的原因是什麼?
我正在處理涉及大量c++
文件的項目。出於好奇,我在問這個問題。Makefile編譯所有文件,即使在單個C++文件中完成更改
通常在完成make
之後,修改後的特定c++
文件將單獨編譯爲後續make
s。有時,我經歷了幾乎所有其他c++
文件和最終可執行文件的單個c++
文件結果編輯的小修改。
Makefile
編譯其他未修改c++
文件的原因是什麼?
因此,makefile
的timestamping
的概念。比方說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
。你可以在這裏看到,因爲dep1
比dep2
更舊規則-2被執行並且dep1
的時間戳被更改,output
現在比dep1
更早,所以執行規則-1。你可以在這裏看到,儘管output
不直接依賴於dep2
當你更新時它被重建dep2
這就是你的情況。檢查makefile
並嘗試檢查您編輯的文件的依賴性。依賴於您編輯的文件的目標將被重建。
目標依賴關係。考慮在*目標上運行make,然後運行測試,看看爲什麼其他所有文件突然不符合規則。沒有看到makefile,其他任何事情都是純粹的猜測。 – WhozCraig
我使用廉價替代品的透明塑料球說,它可能是17,43或68在你的makefile中是錯誤的。但那時我的塑料球不是很經常,所以我不會太注意。如果你發佈你的makefile文件,或者更好,做一個簡單的版本(但是確保它仍然存在相同的問題),然後發佈它,那可能會更好。 –
@MatsPetersson我很嫉妒。我的塑料球通常很霧,一個真正的混蛋從中得到任何東西。你的清楚讓我感到難過=( – WhozCraig