$(origin )function from GNU make is now supported.
$(relative-filename )(contributed by Matthew Lovell) and
-L dirare now supported and work just like
A few other bug fixes went into this release.
There are several user visible changes:
c_compilation_md5is now the default signature method. This means that by default, makepp won't recompile C/C++ modules if only whitespace or comments have changed.
md5has been added, which runs an MD5 checksum on the file's contents. This is not enabled by default; makepp still uses its original method (
exact_match) for any files other than C/C++ source files.
Because of these changes, makepp will recompile everything the first time you run it.
In addition to bug-fixes, this version has one user-visible change. The
--norc-substitution command line option was introduced to allow
compatible handling of whitespace in makefiles.
In addition to numerous bug fixes, this version has several user-visible changes:
--traditional-recursive-makeoption can be used for legacy makefiles which use recursive invocations of make in a way that didn't work with makepp's default implementation.
load_makefilestatement and with recursive make.
This version has several user-visible changes:
%wildcard now matches only files within a directory;
%.cis now equivalent to
**/*.c. The reason for this change was that rules almost never need to use the more complicated wildcard, and it often caused unnecessary directories to be searched. You can get the old behavior by specifying
--percent-subdirson the command line. (I'm curious how people feel about this change. Please let me know if you have good reasons for it being one way or the other.)
load_makefilestatements at all. If this causes you problems, you can turn off implicit loading of makefiles by adding
--no-implicit-loadto the command line. (I'm curious whether people like or dislike implicit loading of makefiles.)
$(phony )function, like this:
$(phony all): program_1 program_2
$(phony ) function simply returns its
arguments, but marks them as phony targets. You can still use
the older syntax that looks like this:
all: program_1 program_2 .PHONY: all
$(phony ) function is an attempt to improve the readability of
makefiles. I'd welcome other suggestions, as I'm still not entirely
happy with the syntax.
In order to support features like parallel make, most of the internals had to be reorganized or rewritten. The result is much cleaner and hopefully more reliable.
Bugs too numerous to mention have been fixed. In order to help ensure
reliability, a test suite has been developed. It doesn't test
absolutely everything yet, but it does test most things, and I hope to
make it more extensive in the future. You can run it by typing
test in the makepp distribution directory. If an unmodified makepp
fails the test suite, please let me know so I can fix it.
There are many new features:
substatement and makepp_extending for details.
.makepp_logexplaining why it rebuilt everything. This is extremely useful for debugging.
-koption for continuing to build even when an error occurs is now supported.
There are also (unfortunately) a few incompatibilities with previous versions:
load_makefile no longer supports targets or variable settings. It now
supports loading a list of makefiles rather than just one, so the
switch is now unnecessary (and no longer documented).
$(INFERRED_OBJS)is no longer supported (since it was not a well-designed interface anyway). Use the newer
$(infer_objects )function instead.
$_is no longer supported. Use
-qare no longer supported due to internal architecture changes.
-nwill probably be supported again in future releases.