Difference between revisions of "NonRecursiveMakefile"
Jump to navigation
Jump to search
m (link fix) |
m |
||
Line 27: | Line 27: | ||
src[[/Makefile]].am contains: | src[[/Makefile]].am contains: | ||
include blah[[/Makefile_insert]] | |||
Definitions for the aforementioned "global" variables. | |||
dist-hook rule. | |||
Advantages: | Advantages: | ||
Can depend on things from other directories. E.g. some files in | |||
display/ depend on helper/sp-marshal.h having been built, and various | display/ depend on helper/sp-marshal.h having been built, and various | ||
*/*-test programs depend on libraries in other directories (previously | */*-test programs depend on libraries in other directories (previously | ||
Line 41: | Line 41: | ||
src[[/Makefile]].am). | src[[/Makefile]].am). | ||
Compilation is expected to be faster: | |||
- Fewer invocations of automake and make. | - Fewer invocations of automake and make. | ||
Line 53: | Line 53: | ||
Disadvantages: | Disadvantages: | ||
All files mentioned in the makefile fragments need to specify their | |||
directory. E.g. if blah[[/Makefile]].am used to contain | directory. E.g. if blah[[/Makefile]].am used to contain | ||
Line 69: | Line 69: | ||
Checks to be done before switching: | Checks to be done before switching: | ||
`make install' creates same directory tree. | |||
- Done. Some differences in the inkscape/inkview executable files, | - Done. Some differences in the inkscape/inkview executable files, | ||
all other files bytewise-identical. | all other files bytewise-identical. | ||
`make check' works. | |||
- Done. Works. Hmm, haven't checked that all expected checks are | - Done. Works. Hmm, haven't checked that all expected checks are | ||
getting run. | getting run. | ||
`make check' works immediately after `make clean'. | |||
- Not yet checked. | - Not yet checked. | ||
`make distcheck' works. | |||
- Not yet checked. | - Not yet checked. |
Latest revision as of 03:33, 11 April 2007
Proposal:
Switch to a single makefile in src/ that includes all the stuff previously in src/**/Makefile.am.
Top-level makefile continues to be recursive make. This simplifies data installation, and the benefits of changing aren't much for directories outside of src/**.
Use automake's `include' directive on blah/Makefile_insert.
Most existing blah/Makefile.am content goes to blah/Makefile_insert, e.g. blah_libblah_a_{CPPFLAGS,SOURCES,LDFLAGS,LDADD}.
Some "global" variable definitions move to src/Makefile.am: noinst_LIBRARIES, DISTCLEANFILES, EXTRA_DIST, EXTRA_PROGRAMS, TESTS, check_PROGRAMS.
INCLUDES/AM_CPPFLAGS become e.g. blah_libblah_a_CPPFLAGS (i.e. per-target instead of per-directory).
"Local" variable definitions (e.g. used for conditional compilation, e.g. win32_sources) go in src/blah/Makefile_insert, and acquire a `blah_' prefix. (The win32_sources variable from src/Makefile.am goes to src/Makefile_insert with no added prefix.)
src/Makefile.am contains:
include blah/Makefile_insert
Definitions for the aforementioned "global" variables.
dist-hook rule.
Advantages:
Can depend on things from other directories. E.g. some files in display/ depend on helper/sp-marshal.h having been built, and various */*-test programs depend on libraries in other directories (previously hacked with a `check-recursive: all-recursive' dependency in src/Makefile.am).
Compilation is expected to be faster:
- Fewer invocations of automake and make.
- Better parallelization is possible with make -j / make -l (e.g. when using distcc).
However, making CPPFLAGS per-target means much longer generated Makefile content. I haven't yet done timing tests (underway).
Disadvantages:
All files mentioned in the makefile fragments need to specify their directory. E.g. if blah/Makefile.am used to contain
libblah_a_SOURCES = \ foo.cpp foo.h
then blah/Makefile_insert will now contain
blah_libblah_a_SOURCES = \ blah/foo.cpp \ blah/foo.h
Any other advantages/disadvantages?
Checks to be done before switching:
`make install' creates same directory tree.
- Done. Some differences in the inkscape/inkview executable files, all other files bytewise-identical.
`make check' works.
- Done. Works. Hmm, haven't checked that all expected checks are getting run.
`make check' works immediately after `make clean'.
- Not yet checked.
`make distcheck' works.
- Not yet checked.
Any other checks to be done?
pjrm.