NAME

Make - module for processing makefiles

SYNOPSIS

	require Make;
	my $make = Make->new(...);
	$make->parse($file);   
	$make->Script(@ARGV)
	$make->Make(@ARGV)
	$make->Print(@ARGV)

        my $targ = $make->Target($name);
        $targ->colon([dependancy...],[command...]);
        $targ->dolon([dependancy...],[command...]);
        my @depends  = $targ->colon->depend;
        my @commands = $targ->colon->command;

DESCRIPTION

Make->new creates an object if new(Makefile => $file) is specified then it is parsed. If not the usual makefile Makefile sequence is used. (If GNU => 1 is passed to new then GNUmakefile is looked for first.)

$make->Make(target...) 'makes' the target(s) specified (or the first 'real' target in the makefile).

$make->Print can be used to 'print' to current select'ed stream a form of the makefile with all variables expanded.

$make->Script(target...) can be used to 'print' to current select'ed stream the equivalent bourne shell script that a make would perform i.e. the output of make -n.

There are other methods (used by parse) which can be used to add and manipulate targets and their dependants. There is a hierarchy of classes which is still evolving. These classes and their methods will be documented when they are a little more stable.

The syntax of makefile accepted is reasonably generic, but I have not re-read any documentation yet, rather I have implemented my own mental model of how make works (then fixed it...).

In addition to traditional

.c.o : 
	$(CC) -c ...

GNU make's 'pattern' rules e.g.

%.o : %.c 
	$(CC) -c ...

Likewise a subset of GNU makes $(function arg...) syntax is supported.

Via pmake Make has built perl/Tk from the MakeMaker generated Makefiles...

BUGS

At present new must always find a makefile, and $make->parse($file) can only be used to augment that file.

More attention needs to be given to using the package to write makefiles.

The rules for matching 'dot rules' e.g. .c.o and/or pattern rules e.g. %.o : %.c are suspect. For example give a choice of .xs.o vs .xs.c + .c.o behaviour seems a little odd.

Variables are probably substituted in different 'phases' of the process than in make(1) (or even GNU make), so 'clever' uses will probably not work.

UNIXisms abound.

SEE ALSO

pmake

AUTHOR

Nick Ing-Simmons