• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

Mpp/H19-Mar-2012-18,45710,639

pod/H19-Mar-2012-21,22615,341

t/H03-May-2022-9,5118,099

ChangeLogH A D19-Mar-2012241.6 KiB6,8304,795

INSTALLH A D05-Feb-2012784 2818

LICENSEH A D04-Nov-2005267 85

Makefile.PLH A D17-Nov-2010254 106

Mpp.pmH A D04-Mar-201215.6 KiB465289

READMEH A D05-Feb-20126.1 KiB127101

VERSIONH A D16-Mar-20124 21

config.plH A D03-May-20224.8 KiB161114

configureH A D07-Sep-2003135 71

configure.batH A D19-Mar-200942 21

controlH A D29-Jan-20121.2 KiB1211

install.plH A D19-Mar-201211.8 KiB378279

makeppH A D19-Mar-201259.6 KiB1,5641,077

makepp_build_cache_controlH A D13-Sep-2010192 84

makepp_builtin_rules.mkH A D07-May-20113.8 KiB12274

makepp_default_makefile.mkH A D10-Jan-2002290 80

makeppbuiltinH A D13-Sep-20104.6 KiB158112

makeppcleanH A D06-Aug-20117.9 KiB267206

makeppgraphH A D04-Mar-201222.2 KiB755615

makeppinfoH A D20-Nov-20116.5 KiB215164

makepplogH A D16-Mar-201216.1 KiB460385

makeppreplayH A D07-Feb-201210.8 KiB300245

recursive_makeppH A D21-Jun-20112.5 KiB7844

README

1Makepp, a build program which has a number of features that allow for reliable
2builds and simpler build files, is a drop-in replacement for GNU make. It
3supports almost all of the syntax that GNU make supports, and can be used with
4makefiles produced by utilities such as automake. It is called makepp (or
5make++) because it was designed with special support for C++, which has since
6been extended to other languages like Swig or embedded SQL. Also its
7relationship to make is analogous to C++'s relationship to C: it is almost
8100% backward compatible but adds a number of new features and much better
9ways to write makefiles.
10
11Makepp works on Unix/Linux-like systems, Ebcdic-based emulations like BS2000
12or z/OS and Windows.  It is written entirely in Perl.  It requires version 5.6
13of Perl or better.  It's distributed under the terms of the Perl Artistic
14License or GPL 2 or newer, which means that it's freely available to anyone
15for just about any purpose.
16
17Some Perl versions have bugs that cause makepp to fail.  These are:
18o Perl 5.6.0 fails in really weird ways on the x86 (and maybe other
19  platforms) on large builds.
20o Perl 5.6.1 has failed for us in different ways on different architectures.
21  On some architectures it seems to work fine, on others it's flaky.
22
23We develop and test mostly with Perl 5.8.0 or later, and we have
24encountered no problems with it.
25
26For the latest distribution, manual pages, and information about mailing
27lists, please see the makepp home page, http://makepp.sourceforge.net.
28
29Features:
30
31o Makepp supports almost all makefile syntax that GNU make supports.
32  Makepp is compatible enough with GNU make and stable enough to compile
33  large packages, such as KDE 2.0.  (For details, see the manual section
34  on old makefiles).
35
36o Makepp automatically scans C/C++ sources for include files.  The
37  implementation is flexible enough that support for other languages can
38  be easily added.
39
40o Makepp remembers the build command, and rebuilds if the command has
41  changed, even if none of the files have changed.  This is useful if
42  you change command line options (e.g., adding -DDEBUG or -g)--you
43  don't have to do make clean.
44
45o By default, makepp rebuilds if any dependency files have changed
46  (even if they are still older than the target).  For example, if you
47  replace a file with an older version, makepp knows to recompile.  This
48  also means that makepp is not bothered by clock synchronization
49  problems.  (If necessary, you can tell it to recompile only if the
50  target is older than a dependency.)
51
52o Makepp has a better system for handling makefiles spread across several
53  directories.  makepp loads several makefiles simultaneously (keeping
54  the variables and default directories separate), and it will realize
55  automatically that a file needed by one makefile is built by a
56  different makefile.  Recursive invocations of make are no longer
57  necessary (but are still supported for backward compatibility).
58
59o Makepp will not recompile if only comments or whitespace in
60  C/C++ sources have changed.  This is especially important for header
61  files which are automatically generated by other programs and are
62  included in many modules.  Even if the date has changed because the
63  file was remade, makepp won't recompile if the file hasn't changed.
64
65o Makepp won't mix output from separate processes when running compilation
66  commands in parallel.
67
68o Makepp writes a log file explaining all of its build decisions,
69  showing what each file depended on and what changed to cause each rule
70  to be executed.  This makes debugging your makefiles much easier.
71
72o Wildcards refer not only to files which already exist but to
73  files which don't exist yet but which can be made.  Thus you can
74  specify
75
76    libmine.so: *.o
77
78  and the compilation will work properly even if none of the
79  .o files exist yet.
80
81o Makepp can automatically separate your source and object directories,
82  even if your makefile is not written that way.  (This is like VPATH
83  but is completely transparent, even for include files.)  Makepp can
84  also build separate copies of your program with different compilation
85  options or on different architectures, automatically keeping the
86  output files separate--you don't have to modify your makefiles at all.
87
88o You can ask makepp to infer what object files are necessary for
89  your program if your source files follow the simple convention that
90  the implementation of all the classes and functions in a .h file is
91  contained in a .cxx, .cc, .C, or .cpp file of the same name.  This can
92  often avoid the use of .a files.
93
94o Makepp won't be confused by multiple names for the same file.  It realizes
95  that xyz.o, ./xyz.o, and ../objects/xyz.o are the same file, and if
96  you load a makefile in a subdirectory, it will recognize that
97  references in that subdirectory to ../xyz.o refer to the same file as
98  xyz.o in the main build directory.  It also won't be confused by soft
99  links in directory names.
100
101o Makepp supports filenames with special characters like space or ":".  Just
102  put any filenames with special characters in single or double quotes.
103
104o Makepp supports more easily understood synonymns for the cryptic
105  symbols $@, $<, $^, etc.
106
107o You can define your own text processing functions in Perl if
108  the default ones are not sophisticated or convenient enough.
109  You can also embed Perl code to manipulate the make variables directly
110  in your makefile.
111
112Why not cons?  cook?  bake?  icmake?  jam?
113
114These are good make utilities too, with some of the same features,
115especially those relating to reliable builds.  I wrote makepp because
116(at the time) cons wasn't flexible enough.
117
118makepp is likely to work with existing makefiles, because it tries hard
119to emulate all the features of the standard make implementations while
120nonetheless being safer.  It has been tested successfully on several
121large systems of makefiles, including large projects controlled by
122autoconf and automake.  And you don't have to learn any new syntax or
123write any new files to use makepp; you can probably use your old
124makefiles (with possibly only minor modifications).  On the other hand,
125you can take advantage of makepp's additional features to simply your
126makefiles.
127