Make - module for processing makefiles
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;
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.)
new(Makefile => $file)
$make->Make(target...) 'makes' the target(s) specified (or the first 'real' target in the makefile).
$make->Make(target...)
$make->Print can be used to 'print' to current select'ed stream a form of the makefile with all variables expanded.
$make->Print
select
$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.
$make->Script(target...)
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...
MakeMaker
At present new must always find a makefile, and $make->parse($file) can only be used to augment that file.
new
$make->parse($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.
pmake
Nick Ing-Simmons
To install Make::Rule::Vars, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Make::Rule::Vars
CPAN shell
perl -MCPAN -e shell install Make::Rule::Vars
For more information on module installation, please visit the detailed CPAN module installation guide.