diff options
| author | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2024-04-07 13:41:34 -0500 |
| commit | 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch) | |
| tree | f1190704f78f04a2b0b4c977d20fe96a828377f1 /devdocs/gnu_make/index.html | |
new repository
Diffstat (limited to 'devdocs/gnu_make/index.html')
| -rw-r--r-- | devdocs/gnu_make/index.html | 975 |
1 files changed, 975 insertions, 0 deletions
diff --git a/devdocs/gnu_make/index.html b/devdocs/gnu_make/index.html new file mode 100644 index 00000000..d991b0af --- /dev/null +++ b/devdocs/gnu_make/index.html @@ -0,0 +1,975 @@ + <h1 class="top">GNU <code>make</code> +</h1> <p>This file documents the GNU <code>make</code> utility, which determines automatically which pieces of a large program need to be recompiled, and issues the commands to recompile them. </p> <p>This is Edition 0.76, last updated 31 October 2022, of <cite>The GNU Make Manual</cite>, for GNU <code>make</code> version 4.4. </p> <p>Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc. </p> <table class="menu" border="0" cellspacing="0"> <tr> +<td align="left" valign="top">• <a href="overview" accesskey="1">Overview</a> +</td> +<td> </td> +<td align="left" valign="top">Overview of <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="introduction" accesskey="2">Introduction</a> +</td> +<td> </td> +<td align="left" valign="top">An introduction to <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="makefiles" accesskey="3">Makefiles</a> +</td> +<td> </td> +<td align="left" valign="top">Makefiles tell <code>make</code> what to do. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="rules" accesskey="4">Rules</a> +</td> +<td> </td> +<td align="left" valign="top">Rules describe when a file must be remade. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="recipes" accesskey="5">Recipes</a> +</td> +<td> </td> +<td align="left" valign="top">Recipes say how to remake a file. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="using-variables" accesskey="6">Using Variables</a> +</td> +<td> </td> +<td align="left" valign="top">You can use variables to avoid repetition. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="conditionals" accesskey="7">Conditionals</a> +</td> +<td> </td> +<td align="left" valign="top">Use or ignore parts of the makefile based on the values of variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="functions" accesskey="8">Functions</a> +</td> +<td> </td> +<td align="left" valign="top">Many powerful ways to manipulate text. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="running" accesskey="9">Invoking make</a> +</td> +<td> </td> +<td align="left" valign="top">How to invoke <code>make</code> on the command line. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="implicit-rules">Implicit Rules</a> +</td> +<td> </td> +<td align="left" valign="top">Use implicit rules to treat many files alike, based on their file names. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="archives">Archives</a> +</td> +<td> </td> +<td align="left" valign="top">How <code>make</code> can update library archives. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="extending-make">Extending make</a> +</td> +<td> </td> +<td align="left" valign="top">Using extensions to <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="integrating-make">Integrating make</a> +</td> +<td> </td> +<td align="left" valign="top">Integrating <code>make</code> with other tools. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="features">Features</a> +</td> +<td> </td> +<td align="left" valign="top">Features GNU <code>make</code> has over other <code>make</code>s. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="missing">Missing</a> +</td> +<td> </td> +<td align="left" valign="top">What GNU <code>make</code> lacks from other <code>make</code>s. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="makefile-conventions">Makefile Conventions</a> +</td> +<td> </td> +<td align="left" valign="top">Conventions for writing makefiles for GNU programs. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="quick-reference">Quick Reference</a> +</td> +<td> </td> +<td align="left" valign="top">A quick reference for experienced users. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="error-messages">Error Messages</a> +</td> +<td> </td> +<td align="left" valign="top">A list of common errors generated by <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="complex-makefile">Complex Makefile</a> +</td> +<td> </td> +<td align="left" valign="top">A real example of a straightforward, but nontrivial, makefile. </td> +</tr> <tr><th colspan="3" align="left" valign="top"></th></tr> +<tr> +<td align="left" valign="top">• <a href="https://www.gnu.org/software/make/manual/html_node/GNU-Free-Documentation-License.html">GNU Free Documentation License</a> +</td> +<td> </td> +<td align="left" valign="top">License for copying this manual. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="https://www.gnu.org/software/make/manual/html_node/Concept-Index.html" rel="index">Concept Index</a> +</td> +<td> </td> +<td align="left" valign="top">Index of Concepts. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="https://www.gnu.org/software/make/manual/html_node/Name-Index.html" rel="index">Name Index</a> +</td> +<td> </td> +<td align="left" valign="top">Index of Functions, Variables, & Directives. </td> +</tr> <tr><th colspan="3" align="left" valign="top"></th></tr> +<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> — The Detailed Node Listing — + +Overview of <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="preparing">Preparing</a> +</td> +<td> </td> +<td align="left" valign="top">Preparing and running <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="reading">Reading</a> +</td> +<td> </td> +<td align="left" valign="top">On reading this text. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="bugs">Bugs</a> +</td> +<td> </td> +<td align="left" valign="top">Problems and bugs. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +An Introduction to Makefiles + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="rule-introduction">Rule Introduction</a> +</td> +<td> </td> +<td align="left" valign="top">What a rule looks like. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="simple-makefile">Simple Makefile</a> +</td> +<td> </td> +<td align="left" valign="top">A simple makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="how-make-works">How Make Works</a> +</td> +<td> </td> +<td align="left" valign="top">How <code>make</code> processes this makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="variables-simplify">Variables Simplify</a> +</td> +<td> </td> +<td align="left" valign="top">Variables make makefiles simpler. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="make-deduces">make Deduces</a> +</td> +<td> </td> +<td align="left" valign="top">Letting <code>make</code> deduce the recipes. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="combine-by-prerequisite">Combine By Prerequisite</a> +</td> +<td> </td> +<td align="left" valign="top">Another style of makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="cleanup">Cleanup</a> +</td> +<td> </td> +<td align="left" valign="top">Rules for cleaning the directory. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Writing Makefiles + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="makefile-contents">Makefile Contents</a> +</td> +<td> </td> +<td align="left" valign="top">What makefiles contain. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="makefile-names">Makefile Names</a> +</td> +<td> </td> +<td align="left" valign="top">How to name your makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="include">Include</a> +</td> +<td> </td> +<td align="left" valign="top">How one makefile can use another makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="makefiles-variable">MAKEFILES Variable</a> +</td> +<td> </td> +<td align="left" valign="top">The environment can specify extra makefiles. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="remaking-makefiles">Remaking Makefiles</a> +</td> +<td> </td> +<td align="left" valign="top">How makefiles get remade. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="overriding-makefiles">Overriding Makefiles</a> +</td> +<td> </td> +<td align="left" valign="top">How to override part of one makefile with another makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="reading-makefiles">Reading Makefiles</a> +</td> +<td> </td> +<td align="left" valign="top">How makefiles are read in. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="parsing-makefiles">Parsing Makefiles</a> +</td> +<td> </td> +<td align="left" valign="top">How makefiles are parsed. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="secondary-expansion">Secondary Expansion</a> +</td> +<td> </td> +<td align="left" valign="top">How and when secondary expansion is performed. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +What Makefiles Contain + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="splitting-lines">Splitting Lines</a> +</td> +<td> </td> +<td align="left" valign="top">Splitting long lines in makefiles </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Writing Rules + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="rule-example">Rule Example</a> +</td> +<td> </td> +<td align="left" valign="top">An example explained. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="rule-syntax">Rule Syntax</a> +</td> +<td> </td> +<td align="left" valign="top">General syntax explained. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="prerequisite-types">Prerequisite Types</a> +</td> +<td> </td> +<td align="left" valign="top">There are two types of prerequisites. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="wildcards">Wildcards</a> +</td> +<td> </td> +<td align="left" valign="top">Using wildcard characters such as ‘*’. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="directory-search">Directory Search</a> +</td> +<td> </td> +<td align="left" valign="top">Searching other directories for source files. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="phony-targets">Phony Targets</a> +</td> +<td> </td> +<td align="left" valign="top">Using a target that is not a real file’s name. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="force-targets">Force Targets</a> +</td> +<td> </td> +<td align="left" valign="top">You can use a target without a recipe or prerequisites to mark other targets as phony. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="empty-targets">Empty Targets</a> +</td> +<td> </td> +<td align="left" valign="top">When only the date matters and the files are empty. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="special-targets">Special Targets</a> +</td> +<td> </td> +<td align="left" valign="top">Targets with special built-in meanings. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="multiple-targets">Multiple Targets</a> +</td> +<td> </td> +<td align="left" valign="top">When to make use of several targets in a rule. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="multiple-rules">Multiple Rules</a> +</td> +<td> </td> +<td align="left" valign="top">How to use several rules with the same target. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="static-pattern">Static Pattern</a> +</td> +<td> </td> +<td align="left" valign="top">Static pattern rules apply to multiple targets and can vary the prerequisites according to the target name. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="double_002dcolon">Double-Colon</a> +</td> +<td> </td> +<td align="left" valign="top">How to use a special kind of rule to allow several independent rules for one target. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="automatic-prerequisites">Automatic Prerequisites</a> +</td> +<td> </td> +<td align="left" valign="top">How to automatically generate rules giving prerequisites from source files themselves. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Using Wildcard Characters in File Names + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="wildcard-examples">Wildcard Examples</a> +</td> +<td> </td> +<td align="left" valign="top">Several examples. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="wildcard-pitfall">Wildcard Pitfall</a> +</td> +<td> </td> +<td align="left" valign="top">Problems to avoid. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="wildcard-function">Wildcard Function</a> +</td> +<td> </td> +<td align="left" valign="top">How to cause wildcard expansion where it does not normally take place. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Searching Directories for Prerequisites + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="general-search">General Search</a> +</td> +<td> </td> +<td align="left" valign="top">Specifying a search path that applies to every prerequisite. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="selective-search">Selective Search</a> +</td> +<td> </td> +<td align="left" valign="top">Specifying a search path for a specified class of names. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="search-algorithm">Search Algorithm</a> +</td> +<td> </td> +<td align="left" valign="top">When and how search paths are applied. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="recipes_002fsearch">Recipes/Search</a> +</td> +<td> </td> +<td align="left" valign="top">How to write recipes that work together with search paths. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="implicit_002fsearch">Implicit/Search</a> +</td> +<td> </td> +<td align="left" valign="top">How search paths affect implicit rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="libraries_002fsearch">Libraries/Search</a> +</td> +<td> </td> +<td align="left" valign="top">Directory search for link libraries. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Static Pattern Rules + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="static-usage">Static Usage</a> +</td> +<td> </td> +<td align="left" valign="top">The syntax of static pattern rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="static-versus-implicit">Static versus Implicit</a> +</td> +<td> </td> +<td align="left" valign="top">When are they better than implicit rules? </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Writing Recipes in Rules + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="recipe-syntax">Recipe Syntax</a> +</td> +<td> </td> +<td align="left" valign="top">Recipe syntax features and pitfalls. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="echoing">Echoing</a> +</td> +<td> </td> +<td align="left" valign="top">How to control when recipes are echoed. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="execution">Execution</a> +</td> +<td> </td> +<td align="left" valign="top">How recipes are executed. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="parallel">Parallel</a> +</td> +<td> </td> +<td align="left" valign="top">How recipes can be executed in parallel. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="errors">Errors</a> +</td> +<td> </td> +<td align="left" valign="top">What happens after a recipe execution error. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="interrupts">Interrupts</a> +</td> +<td> </td> +<td align="left" valign="top">What happens when a recipe is interrupted. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="recursion">Recursion</a> +</td> +<td> </td> +<td align="left" valign="top">Invoking <code>make</code> from makefiles. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="canned-recipes">Canned Recipes</a> +</td> +<td> </td> +<td align="left" valign="top">Defining canned recipes. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="empty-recipes">Empty Recipes</a> +</td> +<td> </td> +<td align="left" valign="top">Defining useful, do-nothing recipes. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Recipe Syntax + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="splitting-recipe-lines">Splitting Recipe Lines</a> +</td> +<td> </td> +<td align="left" valign="top">Breaking long recipe lines for readability. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="variables-in-recipes">Variables in Recipes</a> +</td> +<td> </td> +<td align="left" valign="top">Using <code>make</code> variables in recipes. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Recipe Execution + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="one-shell">One Shell</a> +</td> +<td> </td> +<td align="left" valign="top">One shell for all lines in a recipe. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="choosing-the-shell">Choosing the Shell</a> +</td> +<td> </td> +<td align="left" valign="top">How <code>make</code> chooses the shell used to run recipes. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Parallel Execution + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="parallel-disable">Parallel Disable</a> +</td> +<td> </td> +<td align="left" valign="top">Disabling parallel execution </td> +</tr> <tr> +<td align="left" valign="top">• <a href="parallel-output">Parallel Output</a> +</td> +<td> </td> +<td align="left" valign="top">Handling output during parallel execution </td> +</tr> <tr> +<td align="left" valign="top">• <a href="parallel-input">Parallel Input</a> +</td> +<td> </td> +<td align="left" valign="top">Handling input during parallel execution </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Recursive Use of <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="make-variable">MAKE Variable</a> +</td> +<td> </td> +<td align="left" valign="top">The special effects of using ‘<samp>$(MAKE)</samp>’. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="variables_002frecursion">Variables/Recursion</a> +</td> +<td> </td> +<td align="left" valign="top">How to communicate variables to a sub-<code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="options_002frecursion">Options/Recursion</a> +</td> +<td> </td> +<td align="left" valign="top">How to communicate options to a sub-<code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="_002dw-option">-w Option</a> +</td> +<td> </td> +<td align="left" valign="top">How the ‘<samp>-w</samp>’ or ‘<samp>--print-directory</samp>’ option helps debug use of recursive <code>make</code> commands. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +How to Use Variables + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="reference">Reference</a> +</td> +<td> </td> +<td align="left" valign="top">How to use the value of a variable. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="flavors">Flavors</a> +</td> +<td> </td> +<td align="left" valign="top">Variables come in two flavors. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="advanced">Advanced</a> +</td> +<td> </td> +<td align="left" valign="top">Advanced features for referencing a variable. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="values">Values</a> +</td> +<td> </td> +<td align="left" valign="top">All the ways variables get their values. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="setting">Setting</a> +</td> +<td> </td> +<td align="left" valign="top">How to set a variable in the makefile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="appending">Appending</a> +</td> +<td> </td> +<td align="left" valign="top">How to append more text to the old value of a variable. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="override-directive">Override Directive</a> +</td> +<td> </td> +<td align="left" valign="top">How to set a variable in the makefile even if the user has set it with a command argument. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="multi_002dline">Multi-Line</a> +</td> +<td> </td> +<td align="left" valign="top">An alternate way to set a variable to a multi-line string. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="undefine-directive">Undefine Directive</a> +</td> +<td> </td> +<td align="left" valign="top">How to undefine a variable so that it appears as if it was never set. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="environment">Environment</a> +</td> +<td> </td> +<td align="left" valign="top">Variable values can come from the environment. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="target_002dspecific">Target-specific</a> +</td> +<td> </td> +<td align="left" valign="top">Variable values can be defined on a per-target basis. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="pattern_002dspecific">Pattern-specific</a> +</td> +<td> </td> +<td align="left" valign="top">Target-specific variable values can be applied to a group of targets that match a pattern. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="suppressing-inheritance">Suppressing Inheritance</a> +</td> +<td> </td> +<td align="left" valign="top">Suppress inheritance of variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="special-variables">Special Variables</a> +</td> +<td> </td> +<td align="left" valign="top">Variables with special meaning or behavior. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +The Two Flavors of Variables + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="recursive-assignment">Recursive Assignment</a> +</td> +<td> </td> +<td align="left" valign="top">Setting recursively expanded variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="simple-assignment">Simple Assignment</a> +</td> +<td> </td> +<td align="left" valign="top">Setting simply expanded variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="immediate-assignment">Immediate Assignment</a> +</td> +<td> </td> +<td align="left" valign="top">Setting immediately expanded variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="conditional-assignment">Conditional Assignment</a> +</td> +<td> </td> +<td align="left" valign="top">Assigning variable values conditionally. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Advanced Features for Reference to Variables + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="substitution-refs">Substitution Refs</a> +</td> +<td> </td> +<td align="left" valign="top">Referencing a variable with substitutions on the value. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="computed-names">Computed Names</a> +</td> +<td> </td> +<td align="left" valign="top">Computing the name of the variable to refer to. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Conditional Parts of Makefiles + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="conditional-example">Conditional Example</a> +</td> +<td> </td> +<td align="left" valign="top">Example of a conditional </td> +</tr> <tr> +<td align="left" valign="top">• <a href="conditional-syntax">Conditional Syntax</a> +</td> +<td> </td> +<td align="left" valign="top">The syntax of conditionals. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="testing-flags">Testing Flags</a> +</td> +<td> </td> +<td align="left" valign="top">Conditionals that test flags. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Functions for Transforming Text + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="syntax-of-functions">Syntax of Functions</a> +</td> +<td> </td> +<td align="left" valign="top">How to write a function call. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="text-functions">Text Functions</a> +</td> +<td> </td> +<td align="left" valign="top">General-purpose text manipulation functions. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="file-name-functions">File Name Functions</a> +</td> +<td> </td> +<td align="left" valign="top">Functions for manipulating file names. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="conditional-functions">Conditional Functions</a> +</td> +<td> </td> +<td align="left" valign="top">Functions that implement conditions. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="let-function">Let Function</a> +</td> +<td> </td> +<td align="left" valign="top">Local variables. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="foreach-function">Foreach Function</a> +</td> +<td> </td> +<td align="left" valign="top">Repeat some text with controlled variation. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="file-function">File Function</a> +</td> +<td> </td> +<td align="left" valign="top">Write text to a file. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="call-function">Call Function</a> +</td> +<td> </td> +<td align="left" valign="top">Expand a user-defined function. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="value-function">Value Function</a> +</td> +<td> </td> +<td align="left" valign="top">Return the un-expanded value of a variable. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="eval-function">Eval Function</a> +</td> +<td> </td> +<td align="left" valign="top">Evaluate the arguments as makefile syntax. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="origin-function">Origin Function</a> +</td> +<td> </td> +<td align="left" valign="top">Find where a variable got its value. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="flavor-function">Flavor Function</a> +</td> +<td> </td> +<td align="left" valign="top">Find out the flavor of a variable. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="make-control-functions">Make Control Functions</a> +</td> +<td> </td> +<td align="left" valign="top">Functions that control how make runs. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="shell-function">Shell Function</a> +</td> +<td> </td> +<td align="left" valign="top">Substitute the output of a shell command. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="guile-function">Guile Function</a> +</td> +<td> </td> +<td align="left" valign="top">Use GNU Guile embedded scripting language. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +How to Run <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="makefile-arguments">Makefile Arguments</a> +</td> +<td> </td> +<td align="left" valign="top">How to specify which makefile to use. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="goals">Goals</a> +</td> +<td> </td> +<td align="left" valign="top">How to use goal arguments to specify which parts of the makefile to use. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="instead-of-execution">Instead of Execution</a> +</td> +<td> </td> +<td align="left" valign="top">How to use mode flags to specify what kind of thing to do with the recipes in the makefile other than simply execute them. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="avoiding-compilation">Avoiding Compilation</a> +</td> +<td> </td> +<td align="left" valign="top">How to avoid recompiling certain files. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="overriding">Overriding</a> +</td> +<td> </td> +<td align="left" valign="top">How to override a variable to specify an alternate compiler and other things. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="testing">Testing</a> +</td> +<td> </td> +<td align="left" valign="top">How to proceed past some errors, to test compilation. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="temporary-files">Temporary Files</a> +</td> +<td> </td> +<td align="left" valign="top">Where <code>make</code> keeps its temporary files. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="options-summary">Options Summary</a> +</td> +<td> </td> +<td align="left" valign="top">Summary of Options </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Using Implicit Rules + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="using-implicit">Using Implicit</a> +</td> +<td> </td> +<td align="left" valign="top">How to use an existing implicit rule to get the recipes for updating a file. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="catalogue-of-rules">Catalogue of Rules</a> +</td> +<td> </td> +<td align="left" valign="top">A list of built-in rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="implicit-variables">Implicit Variables</a> +</td> +<td> </td> +<td align="left" valign="top">How to change what predefined rules do. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="chained-rules">Chained Rules</a> +</td> +<td> </td> +<td align="left" valign="top">How to use a chain of implicit rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="pattern-rules">Pattern Rules</a> +</td> +<td> </td> +<td align="left" valign="top">How to define new implicit rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="last-resort">Last Resort</a> +</td> +<td> </td> +<td align="left" valign="top">How to define a recipe for rules which cannot find any. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="suffix-rules">Suffix Rules</a> +</td> +<td> </td> +<td align="left" valign="top">The old-fashioned style of implicit rule. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="implicit-rule-search">Implicit Rule Search</a> +</td> +<td> </td> +<td align="left" valign="top">The precise algorithm for applying implicit rules. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Defining and Redefining Pattern Rules + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="pattern-intro">Pattern Intro</a> +</td> +<td> </td> +<td align="left" valign="top">An introduction to pattern rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="pattern-examples">Pattern Examples</a> +</td> +<td> </td> +<td align="left" valign="top">Examples of pattern rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="automatic-variables">Automatic Variables</a> +</td> +<td> </td> +<td align="left" valign="top">How to use automatic variables in the recipe of implicit rules. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="pattern-match">Pattern Match</a> +</td> +<td> </td> +<td align="left" valign="top">How patterns match. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="match_002danything-rules">Match-Anything Rules</a> +</td> +<td> </td> +<td align="left" valign="top">Precautions you should take prior to defining rules that can match any target file whatever. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="canceling-rules">Canceling Rules</a> +</td> +<td> </td> +<td align="left" valign="top">How to override or cancel built-in rules. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Using <code>make</code> to Update Archive Files + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="archive-members">Archive Members</a> +</td> +<td> </td> +<td align="left" valign="top">Archive members as targets. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="archive-update">Archive Update</a> +</td> +<td> </td> +<td align="left" valign="top">The implicit rule for archive member targets. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="archive-pitfalls">Archive Pitfalls</a> +</td> +<td> </td> +<td align="left" valign="top">Dangers to watch out for when using archives. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="archive-suffix-rules">Archive Suffix Rules</a> +</td> +<td> </td> +<td align="left" valign="top">You can write a special kind of suffix rule for updating archives. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Implicit Rule for Archive Member Targets + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="archive-symbols">Archive Symbols</a> +</td> +<td> </td> +<td align="left" valign="top">How to update archive symbol directories. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Extending GNU <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="guile-integration">Guile Integration</a> +</td> +<td> </td> +<td align="left" valign="top">Using Guile as an embedded scripting language. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="loading-objects">Loading Objects</a> +</td> +<td> </td> +<td align="left" valign="top">Loading dynamic objects as extensions. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +GNU Guile Integration + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="guile-types">Guile Types</a> +</td> +<td> </td> +<td align="left" valign="top">Converting Guile types to <code>make</code> strings. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="guile-interface">Guile Interface</a> +</td> +<td> </td> +<td align="left" valign="top">Invoking <code>make</code> functions from Guile. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="guile-example">Guile Example</a> +</td> +<td> </td> +<td align="left" valign="top">Example using Guile in <code>make</code>. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Loading Dynamic Objects + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="load-directive">load Directive</a> +</td> +<td> </td> +<td align="left" valign="top">Loading dynamic objects as extensions. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="remaking-loaded-objects">Remaking Loaded Objects</a> +</td> +<td> </td> +<td align="left" valign="top">How loaded objects get remade. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="loaded-object-api">Loaded Object API</a> +</td> +<td> </td> +<td align="left" valign="top">Programmatic interface for loaded objects. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="loaded-object-example">Loaded Object Example</a> +</td> +<td> </td> +<td align="left" valign="top">Example of a loaded object </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Integrating GNU <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="job-slots">Job Slots</a> +</td> +<td> </td> +<td align="left" valign="top">Share job slots with GNU <code>make</code>. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="terminal-output">Terminal Output</a> +</td> +<td> </td> +<td align="left" valign="top">Control output to terminals. </td> +</tr> <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment"> + +Sharing Job Slots with GNU <code>make</code> + +</pre></th></tr> +<tr> +<td align="left" valign="top">• <a href="posix-jobserver">POSIX Jobserver</a> +</td> +<td> </td> +<td align="left" valign="top">Using the jobserver on POSIX systems. </td> +</tr> <tr> +<td align="left" valign="top">• <a href="windows-jobserver">Windows Jobserver</a> +</td> +<td> </td> +<td align="left" valign="top">Using the jobserver on Windows systems. </td> +</tr> <tr><th colspan="3" align="left" valign="top"></th></tr> +</table><div class="_attribution"> + <p class="_attribution-p"> + Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc. <br>Licensed under the GNU Free Documentation License.<br> + <a href="https://www.gnu.org/software/make/manual/html_node/index.html" class="_attribution-link">https://www.gnu.org/software/make/manual/html_node/index.html</a> + </p> +</div> |
