tags:

views:

60

answers:

1

I have a BSDmakefile and GNUmakefile that are pretty much identical except for dependency management.

The GNUmakefile:

ifneq ($(MAKECMDGOALS), "clean")
-include $(dependencies)
endif

The BSDmakefile:

.for i in $(dependencies)
.sinclude "${i}"
.endfor

Is there a way to make it so that I can detect if I am running under gmake or bsdmake and then execute the appropriate include statements based off of that? I remember seeing someone take advantage of a quirk in both makefile processors so that they could achieve a similar effect.

Alternatively, if there is a better approach than this, I would like to know! (switching to SCons or CMake is not appropriate!)

Thanks!

+3  A: 

You could put your GNU-specific stuff in GNUmakefile, your BSD-specific stuff in BSDmakefile, and your common stuff in a file named Makefile.common or similar. Then include Makefile.common at the very beginning of each of the other two. Downside is, now you have 3 makefiles instead of 2. Upside, you'll only be editing 1.

Jander
Your "downside" is like saying that splitting a 10,000 LOC file into logically related units has the downside of producing more than one source file.
Jack Kelly
@Jack Kelly: But it does. :)
Matt Joiner