.\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MAKEPP_BUILTIN 1" .TH MAKEPP_BUILTIN 1 "2016-11-28" "perl v5.24.1" "Makepp" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" makepp_builtin \-\- Built in rules for makepp .SH "DESCRIPTION" .IX Header "DESCRIPTION" Makepp may be able to figure out how to compile and link your program even if you specify no rules at all (or if you don't even have a Makeppfile). After every Makeppfile is loaded, makepp also loads a set of default rules. (These rules are special in that they do not override any other rules in the Makeppfile.) The default rule database is stored in the file \&\f(CW\*(C`makepp_builtin_rules.mk\*(C'\fR in the makepp distribution or library directory, so you can always look at that to see exactly what the default rules are. .PP Makepp's builtin rules are almost the same as the rules in \s-1GNU\s0 make, except that it has no rules for some of the rare languages that \s-1GNU\s0 make has rules for. (This is deliberate; I often ran into trouble with \s-1GNU\s0 make on several projects that accidentally reused some of the suffixes that \s-1GNU\s0 make assigned to those rare languages.) The rules use the same variables as \s-1GNU\s0 make, with some possibly useful additions. Makepp is smarter than \s-1GNU\s0 make about inferring which compiler to use, and which other objects and libraries to link in. .SS "Default variable values" .IX Subsection "Default variable values" Makepp supplies default values for a number of variables. Most of these are typically used in rules, and are indeed used in the default rules. Their values can be overridden by assigning to these variables in your Makeppfile or on the command line. .PP These variables are documented in \*(L"Predefined Variables\*(R" in makepp_variables. If you have any questions about what any variable evaluates to, you can always put a line like either of these lines in your Makeppfile: .PP .Vb 2 \& dummy := $(print $(CC)) \& &echo \-\- $(CC) # Must be indented less than previous rule. .Ve .PP which simply prints the value of the \f(CW\*(C`$(CC)\*(C'\fR variable when the Makeppfile is loaded. (Incidentally, this is a useful way to debug any expression that you're not sure is right.) .SS "Compilation rules" .IX Subsection "Compilation rules" In simplified form, here is approximately what the compilation rules look like. If you change the values of any of the indicated variables, the compilation command is changed as expected. .PP .Vb 5 \& # \& # For C programs: \& # \& %.o: %.c \& $(CC) $(CFLAGS) $(CPPFLAGS) \-c $(input) \-o $(output) \& \& # \& # For C++ programs: \& # \& %.o: %.cxx # and also %.cc, %.cpp, %.c++, and %.C \& $(CXX) $(CXXFLAGS) $(CPPFLAGS) \-c $(input) \-o $(output) \& \& # \& # For Fortran programs: \& # \& %.o: %.f \& $(FC) $(FFLAGS) \-c $(input) \-o $(output) \& \& # \& # Yacc and lex: \& # \& %.c: %.y \& $(YACC) $(YFLAGS) $(input) \& &mv \-f y.tab.c $(output) \& \& %.c: %.l \& $(LEX) $(LFLAGS) \-t $(input) \-o $(output) .Ve .PP If you're curious about the exact details, you can look in the file \&\fImakepp_builtin_rules.mk\fR in the makepp distribution. .SS "Link rules" .IX Subsection "Link rules" Makepp also knows how to link programs, too. Makepp attempts to be more clever than the standard Unix make when it comes to figuring out a link command. Suppose you are trying to build the target program \f(CW\*(C`xyz\*(C'\fR. Makepp will try to build this from \f(CW\*(C`xyz.o\*(C'\fR, and (unlike the standard Unix make) it will also attempt to infer whether any other objects or libraries need to be linked in. .PP The link rule looks something like this: .PP .Vb 2 \& xyz: $(infer_objects xyz.o, *.o) \& $(infer_linker $(inputs)) $(inputs) $(LDFLAGS) $(LDLIBS) $(LIBS) \-o $(output) .Ve .PP \&\f(CW\*(C`$(infer_objects)\*(C'\fR attempts to infer what other \f(CW\*(C`.o\*(C'\fR files need to be linked in based on what \&\f(CW\*(C`.h\*(C'\fR files are included. .PP The \*(L"inferred linker\*(R" is a special bit of magic that turns into \f(CW\*(C`$(CC)\*(C'\fR if all the sources are C code, \f(CW\*(C`$(CXX)\*(C'\fR if any of the sources are \*(C+, or \f(CW\*(C`$(F77)\*(C'\fR if any of the sources are Fortran. .SS "Turning off the built-in rules" .IX Subsection "Turning off the built-in rules" If you don't like the built-in rules, don't use them. If they don't work for you, your built is probably sufficiently complicated that you need your own custom Makeppfile anyway. .PP To turn off the builtin rules, you can add a line like this to your Makeppfile: .IX Xref "makepp_no_builtin" .PP .Vb 1 \& makepp_no_builtin = 1 .Ve .PP If you do use them, but not the fairly expensive builtin linker rules, you can turn those off with: .IX Xref "makepp_no_builtin_linker" .PP .Vb 1 \& makepp_no_builtin_linker = 1 .Ve .PP For backward compatibility, makepp also turns off its default rules if you include this line somewhere in your Makeppfile: .PP .Vb 1 \& .SUFFIXES: .Ve .PP You can turn off builtin rules for every Makeppfile in the entire build by specifying the \f(CW\*(C`\-\-no\-builtin\-rules\*(C'\fR option on the command line.