Makefile GNU Make是否列出自上次调用Make以来修改的源文件?

Makefile GNU Make是否列出自上次调用Make以来修改的源文件?,makefile,gnu-make,Makefile,Gnu Make,我知道 根据哪些源文件已更改,自动确定需要更新哪些文件。如果一个非源文件依赖于另一个非源文件,它还会自动确定更新文件的正确顺序 因此,如果您更改了一些源文件,然后运行Make,则不需要重新编译所有程序。它仅更新那些直接或间接依赖于所更改的源文件的非源文件 现在我想知道我是否可以要求Make列出这些修改过的源代码?一个简单的方法是使用dry run选项来Make,它可以是-n或--dry run或一些其他选择,部分取决于您使用的具体实现。这将告诉您如果执行make,它将做什么,这将向您显示它将重新

我知道

根据哪些源文件已更改,自动确定需要更新哪些文件。如果一个非源文件依赖于另一个非源文件,它还会自动确定更新文件的正确顺序

因此,如果您更改了一些源文件,然后运行Make,则不需要重新编译所有程序。它仅更新那些直接或间接依赖于所更改的源文件的非源文件


现在我想知道我是否可以要求Make列出这些修改过的源代码?

一个简单的方法是使用dry run选项来Make,它可以是
-n
--dry run
或一些其他选择,部分取决于您使用的具体实现。这将告诉您如果执行make,它将做什么,这将向您显示它将重新编译哪些源文件


都在
man
页面上

您将需要一个虚拟文件,该文件使用所有源作为先决条件:

mod_list: foo.c bar.cc baz.cpp
    @echo modified sources: $?
    @touch $@
您可以将源列表作为单独的变量保留:

WATCHED_SOURCES = foo.c bar.cc baz.cpp
mod_list: $(WATCHED_SOURCES)
    @echo modified sources: $?
    @touch $@
或者使用通配符查看所有存在的源:

WATCHED_SOURCES = $(wildcard *.c *.cc *.cpp *.whatever)
mod_list: $(WATCHED_SOURCES)
    @echo modified sources: $?
    @touch $@

你想列出它用来构建任何东西的修改源吗?或者您想要一个新目标,列出自上次运行Make以来已修改的所有源文件?最好是一个新目标