- Makefile 教程
- Makefile - 首頁
- Makefile - 為什麼使用 Makefile?
- Makefile - 宏
- Makefile - 依賴關係
- Makefile - 規則
- Makefile - 字尾規則
- Makefile - 指令
- Makefile - 重新編譯
- Makefile - 其他特性
- Makefile - 示例
- Makefile 快速指南
- Makefile - 快速指南
- Makefile - 有用資源
- Makefile - 討論
Makefile - 重新編譯
make 程式是一個智慧的實用程式,其工作基於您對原始檔的更改。如果您有四個檔案 main.cpp、hello.cpp、factorial.cpp 和 functions.h,那麼所有其餘檔案都依賴於 functions.h,而 main.cpp 依賴於 hello.cpp 和 factorial.cpp。因此,如果您在 functions.h 中進行任何更改,則make 將重新編譯所有原始檔以生成新的目標檔案。但是,如果您在 main.cpp 中進行任何更改,因為這並不依賴於任何其他檔案,則僅重新編譯 main.cpp 檔案,而不會重新編譯 help.cpp 和 factorial.cpp。
在編譯檔案時,make 會檢查其目標檔案並比較時間戳。如果原始檔的時間戳比目標檔案新,則它會生成新的目標檔案,假設原始檔已更改。
避免重新編譯
一個專案可能包含數千個檔案。有時您可能更改了原始檔,但您可能不想重新編譯所有依賴它的檔案。例如,假設您向其他檔案依賴的標頭檔案中添加了宏或宣告。出於謹慎起見,make 假設標頭檔案的任何更改都需要重新編譯所有依賴檔案,但您知道它們不需要重新編譯,並且您寧願不浪費時間等待它們編譯。
如果您在更改標頭檔案之前預料到這個問題,可以使用 `-t` 標誌。此標誌告訴make 不要執行規則中的命令,而是透過更改其上次修改日期來標記目標為最新。您需要遵循以下步驟:
使用命令 `make` 重新編譯確實需要重新編譯的原始檔。
更改標頭檔案。
使用命令 `make -t` 將所有目標檔案標記為最新。下次執行 make 時,標頭檔案的更改不會導致任何重新編譯。
如果您已經在某些檔案確實需要重新編譯的時候更改了標頭檔案,那麼現在這樣做已經太晚了。相反,您可以使用 `-o 檔案` 標誌,該標誌將指定的檔案標記為“舊的”。這意味著,檔案本身不會被重新建立,並且不會因其而重新建立任何其他內容。您需要遵循以下步驟:
使用 `make -o 標頭檔案` 重新編譯由於獨立於特定標頭檔案的原因而需要編譯的原始檔。如果涉及多個頭檔案,則為每個標頭檔案使用單獨的 `-o` 選項。
使用 `make -t` 更新所有目標檔案。