2012-07-16 82 views
3

我知道自上次調用make後,GNU Make列出修改後的源文件?

根據哪些源文件已更改自動計算出需要更新的文件。它還會自動確定更新文件的正確順序,以防一個非源文件依賴於另一個非源文件。

因此,如果您更改了幾個源文件,然後運行Make,則無需重新編譯您的所有程序。它僅更新那些直接或間接依賴於您更改的源文件的非源文件。

現在我想知道我是否可以問Make來列出這些修改後的源代碼?

+0

你想讓列出修改後的源代碼,用它來構建它正在構建的任何東西?還是你想要一個新的目標,列出自上次運行Make後已修改的所有源文件? – Beta 2012-07-16 12:11:51

+0

新的目標將更加可取 – Roy 2012-07-16 14:10:03

回答

4

你需要它使用所有的源代碼作爲其先決條件虛擬文件:

mod_list: foo.c bar.cc baz.cpp 
    @echo modified sources: $? 
    @touch [email protected] 

你可以把源列表作爲一個獨立的變量:

WATCHED_SOURCES = foo.c bar.cc baz.cpp 
mod_list: $(WATCHED_SOURCES) 
    @echo modified sources: $? 
    @touch [email protected] 

或者使用通配符看看目前的所有源代碼:

WATCHED_SOURCES = $(wildcard *.c *.cc *.cpp *.whatever) 
mod_list: $(WATCHED_SOURCES) 
    @echo modified sources: $? 
    @touch [email protected] 
+0

非常感謝@beta。這對我有效。 – Roy 2012-07-17 13:03:16

0

一個簡單的方法是使用幹運行選項進行製作,它可以是-n--dry-run或其他幾個選項,具體取決於您正在使用的實現方式。這告訴你如果執行哪一個將會做什麼,其中,特別是,告訴你它將重新編譯什麼源文件。

這一切都在man頁面。