[PATCH v2] Record dependencies during build instead of before
Tomi Ollila
tomi.ollila at iki.fi
Wed Apr 11 13:52:01 PDT 2012
On Wed, Apr 11 2012, Austin Clements <amdragon at MIT.EDU> wrote:
> Previously, the makefile created dependency files in a separate, first
> pass. In particular, include-ing the dependency files would cause
> make to attempt to rebuild those files using the dependency-generation
> rules in the makefile. Unfortunately, this approach required obtuse
> rules and silently delayed the start of the build process (by quite a
> bit on a clean tree without any dependency files). Worse, this
> required the dependency files to themselves depend on all of the
> headers the source file depended on, which meant that, if a header
> file was removed, the depedency file could not be updated because of a
> missing dependency (!), which would cause make to silently fail.
>
> This patch eliminates the dependency generation rules and instead
> generates dependency files as a side-effect of the regular build rule.
> On the first build, we don't need to know the dependencies beforehand;
> the object file doesn't exist, so it will be built anyway. On
> subsequent builds, if a header file is updated, the dependency rules
> generated by the previous build will force a rebuild. If a source
> file is updated, the dependency rules may be stale, but it doesn't
> matter because the updated source file will force a rebuild.
>
> In the final case above, the stale dependency rules may refer to a
> header file that no longer exists but is also no longer needed. In
> order to prevent this from breaking the build, we also pass gcc the
> -MP option, which generates phony targets for every depended-on header
> file, so make won't complain if it can't find them during a later
> build.
> ---
Looks good, patch applies and works (at least the cases I tested and
examined). And is definitely better than before.
+1
Tomi
> Sorry, the previous version of this patch was corrupted. Hopefully
> this one will be correct.
>
> Makefile.local | 18 ++++--------------
> 1 files changed, 4 insertions(+), 14 deletions(-)
>
More information about the notmuch
mailing list