The most important change was support for the Cygwin build environment. You can now run makepp with the Cygwin version of perl; I do not think it will work properly with the native windows version of perl yet.
A few other bug fixes went into this release.
The most important change in this version is that makepp can accept a vastly larger number of makefiles without any command line options because of some changes to the implementation of recursive make. There are a few minor improvements in the GNU make compatibility, and a slight improvement in memory usage.
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.
md5, has 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.
--norc-substitution command line option was
introduced to allow compatible handling of whitespace in
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:
$(if cond, then, else)function is supported to a limited extent.
%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
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
makepp 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:
.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:
-Fswitch 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.