![](/img/trans.png)
[英]Makefile compiles all files even if file is not changed when .o files are placed in other floder
[英]Makefile compiles all files, even though changes are done in a single c++ file
我從事的項目涉及大量的c++
文件。 我出於好奇而問這個問題。
通常,在完成make
之后,將修改后的特定c++
文件單獨編譯為后續make
。 有時,我在單個c++
文件結果編譯甚至幾乎所有其他c++
文件和最終可執行文件中都經歷了很小的修改。
Makefile
編譯其他未修改的c++
文件的原因是什么?
因此,這里出現了在makefile
中makefile
timestamping
的概念。 比如說make
rule就是這樣
output: dep1
rule-1
dep1: dep2
rule-2
當您執行makefile
make
首先檢查output
文件的timestamp
(如果output
文件不存在,那么默認情況下將執行規則)。 假設output
是在1200hrs創建的,則您在1205hrs更改文件dep1並執行make
,然后make
發現目標輸出早於其depepndency dep1
因此它將執行rule-1。 如果假設output
在1300hrs創建, dep1
在1230hrs,現在你更新dep2
在1310hrs,並執行make
。 您可以在此處看到,因為執行了dep1
早於dep2
Rule-2,並且dep1
的時間戳,現在output
早於dep1
因此執行了rule-1。 即使output
不直接依賴於dep2
,您也可以在這里看到,在更新dep2
時它會重新dep2
這就是您的情況。 檢查makefile
然后嘗試檢查所編輯文件的依賴性。 取決於您編輯的文件的目標將被重建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.