0
我的Makefile看起來像這樣幾個目標:給具有明顯的依賴,使用相同的規則
MODULES = core models pages admin
CMXSFILES = $(patsubst %,%.cmxs,$(MODULES))
all : $(CMXSFILES)
core.cmxs : core
make -C $< ../[email protected]
models.cmxs : models core.cmxs
make -C $< ../[email protected]
pages.cmxs : pages core.cmxs models.cmxs
make -C $< ../[email protected]
admin.cmxs : admin core.cmxs models.cmxs
make -C $< ../[email protected]
是否有表達更簡潔的方式最後四個規則的方式,即構建命令是完全相同?
事情是這樣的:
core.cmxs: core
models.cmxs: models core.cmxs
pages.cmxs: pages core.cmxs models.cmxs
admin.cmxs: admin core.cmxs models.cmxs
make -C $< ../[email protected]
哦不錯,我沒有」我們可以分別指定依賴和規則。除了我不確定將目錄設置爲PHONY,我還是把目錄作爲依賴關係,以便重新編譯模塊,從而使其中的至少一個文件發生更改。無論如何,我會給它一個鏡頭。並感謝$(MAKE)技巧! :-) –
目錄時間戳在文件變化時不會改變:這是一個常見的誤解。當_directory的內容發生變化時,目錄時間戳會發生變化:每當在該目錄中添加,刪除或重命名文件時;但在更新現有文件時不會。可能無論您用什麼過程來更新該目錄中的文件,都會導致目錄更改爲副作用:編輯器會創建臨時文件或其他內容。但是,如果您只是使用'echo hi >> foo'到現有文件'foo',那麼目錄的修改時間不會改變。 – MadScientist
感謝您的澄清。正如你現在已經猜到的那樣,我不習慣Makefile:D強制make使用'$(MAKE)-B -C $ <../[email protected]'遞歸地遍歷目錄是否是好習慣?子目錄的數量相對較少,我不在乎如此小的時間損失,如果它可以讓我每次更換某個文件時都讓我乾淨&& make all' ... –