summaryrefslogtreecommitdiff
path: root/devdocs/gnu_make/rule-introduction.html
blob: 24114b53cdabd266687e475d5c2ac4fb6ffbd733 (plain)
1
2
3
4
5
6
7
8
9
10
11
  <h1 class="section">What a Rule Looks Like</h1>    <p>A simple makefile consists of “rules” with the following shape: </p>    <div class="example"> <pre class="example"><var>target</var> … : <var>prerequisites</var> …
        <var>recipe</var>
        …
        …
</pre>
</div> <p>A <em>target</em> is usually the name of a file that is generated by a program; examples of targets are executable or object files. A target can also be the name of an action to carry out, such as ‘<samp>clean</samp>’ (see <a href="phony-targets">Phony Targets</a>). </p> <p>A <em>prerequisite</em> is a file that is used as input to create the target. A target often depends on several files. </p>  <p>A <em>recipe</em> is an action that <code>make</code> carries out. A recipe may have more than one command, either on the same line or each on its own line. <strong>Please note:</strong> you need to put a tab character at the beginning of every recipe line! This is an obscurity that catches the unwary. If you prefer to prefix your recipes with a character other than tab, you can set the <code>.RECIPEPREFIX</code> variable to an alternate character (see <a href="special-variables">Special Variables</a>). </p> <p>Usually a recipe is in a rule with prerequisites and serves to create a target file if any of the prerequisites change. However, the rule that specifies a recipe for the target need not have prerequisites. For example, the rule containing the delete command associated with the target ‘<samp>clean</samp>’ does not have prerequisites. </p> <p>A <em>rule</em>, then, explains how and when to remake certain files which are the targets of the particular rule. <code>make</code> carries out the recipe on the prerequisites to create or update the target. A rule can also explain how and when to carry out an action. See <a href="rules">Writing Rules</a>. </p> <p>A makefile may contain other text besides rules, but a simple makefile need only contain rules. Rules may look somewhat more complicated than shown in this template, but all fit the pattern more or less. </p><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/Rule-Introduction.html" class="_attribution-link">https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html</a>
  </p>
</div>