這個想法是一個項目有一個文件,其中有__DATE__
和__TIME__
。重新編譯它可能會很酷,但不會明確更改其修改日期。如何強制重新編譯Makefile中的單個文件?
編輯:$(shell touch -c ..)可能是一個很好的解決方案,只要笨拙。
這個想法是一個項目有一個文件,其中有__DATE__
和__TIME__
。重新編譯它可能會很酷,但不會明確更改其修改日期。如何強制重新編譯Makefile中的單個文件?
編輯:$(shell touch -c ..)可能是一個很好的解決方案,只要笨拙。
標準成語是有目標文件(未在源文件!)取決於目標不存在,也沒有規則或依賴關係(該目標通常稱爲FORCE),像這樣
always-recompile.o: FORCE
FORCE:
但是,如果名爲「FORCE」的文件以某種方式被創建,這將會中斷。隨着GNU讓你可以改用特殊目標.PHONY,它沒有這個限制,但需要你有一個明確的規則來重建該文件:
always-recompile.o:
$(CC) $(CFLAGS) -c -o always-recompile.o always-recompile.c
.PHONY: always-recompile.o
詳情請參閱http://www.gnu.org/software/make/manual/html_node/Phony-Targets.html。
執行此操作的一種方法是在運行make
之前刪除相應的目標文件(.o
或.obj
)。這將觸發重新編譯(和重新鏈接)而不更改源文件修改日期。
這可能是您的問題的錯誤解決方案。某些版本控制工具可以轉儲源版本的詳細信息。在構建過程中有一些腳本hackery,並將這些細節內置到您的代碼中。如果您必須在十年內查看源代碼並重新構建,則無關緊要 - 您的版本信息仍會反映該代碼的詳細信息。 – Steve314 2010-07-22 00:40:54
@ Steve314:更有可能他想要一個提到構建號和構建日期的about box。 – 2010-07-22 00:55:43
@Ken - 如果是這樣,版本控制工具技巧是正確的。沒有理由說明爲什麼腳本hackery不能將版本信息放入代碼(或資源文件)中,而將內部版本號碼放入關於框的內容可能需要輕易忘記的人工干預。編譯器和文件系統都不知道你的內部版本號。 – Steve314 2010-07-22 01:08:50