make 程式是一個智能的實用程式和工作根據在原始檔案中的變化。如果有四個檔main.cpp,hello.cpp,factorial.cpp和functions.h。這裏所有reamining檔是依賴functions.h,main.cpp的是依賴於hello.cpp,factorical.cpp。因此,如果做任何改變functions.h然後將重新編譯所有原始檔案來生成新的對象檔。但是,如果做任何改變main.cpp,因為這是不依賴任何其他的過濾,那麼在這種情況下,只有main.cpp檔將被重新編譯和hellp.cpp factorial.cpp將無法重新編譯。
雖然編譯一個檔時,MAKE檢查目標檔和比較時間表帶,如果原始檔案有更新的時間戳比目標檔,然後將生成新的對象檔,假設原始檔案已被改變。
避免重新編譯
有可能是專案包括成千上萬的檔。有時候可能已經改變了一個原始檔案,但不想重新編譯所有依賴於它的檔。例如,假設添加宏到一個頭檔或聲明,許多其他檔依賴。假設在頭檔中的任何變化需要重新編譯所有相關檔,但要知道,他們並不需要重新編譯,你寧可不要浪費時間等待他們的編譯。
如果預期改變頭檔的問題之前,可以使用`-t'標誌位。這個標誌告訴make命令不運行的規則,而是來標記目標,迄今為止,通過改變它的最後修改日期。遵循以下步驟:
-
使用命令'make'來重新編譯真的需要重新編譯原始檔案。
-
在頭檔中進行更改。
-
使用命令`-t'來紀念所有的目標檔為最新。下一次運行make,在頭檔中的變化不會引起任何重新編譯。
如果已經改變了頭檔的時候,有一些檔就需要重新編譯,做到這一點已經太晚了。相反,可以使用`-o檔“的標誌,這標誌著一個指定的檔作為”old“。這意味著該檔本身不會被重制並沒有別的其交代將被重制。遵循以下步驟:
-
重新編譯原始檔案,需要編制獨立的特定頭檔的原因,`make -o headerfile'。如果涉及幾個頭檔,使用一個單獨的`-o'選項,每個頭檔。
-
輕觸所有目標檔使用`make -t'.