1
2
3
4
5
6
7
8
9
10
11
12
13
|
<h1 class="subsection">Writing Recipes with Directory Search</h1> <p>When a prerequisite is found in another directory through directory search, this cannot change the recipe of the rule; they will execute as written. Therefore, you must write the recipe with care so that it will look for the prerequisite in the directory where <code>make</code> finds it. </p> <p>This is done with the <em>automatic variables</em> such as ‘<samp>$^</samp>’ (see <a href="automatic-variables">Automatic Variables</a>). For instance, the value of ‘<samp>$^</samp>’ is a list of all the prerequisites of the rule, including the names of the directories in which they were found, and the value of ‘<samp>$@</samp>’ is the target. Thus: </p> <div class="example"> <pre class="example">foo.o : foo.c
cc -c $(CFLAGS) $^ -o $@
</pre>
</div> <p>(The variable <code>CFLAGS</code> exists so you can specify flags for C compilation by implicit rules; we use it here for consistency so it will affect all C compilations uniformly; see <a href="implicit-variables">Variables Used by Implicit Rules</a>.) </p> <p>Often the prerequisites include header files as well, which you do not want to mention in the recipe. The automatic variable ‘<samp>$<</samp>’ is just the first prerequisite: </p> <div class="example"> <pre class="example">VPATH = src:../headers
foo.o : foo.c defs.h hack.h
cc -c $(CFLAGS) $< -o $@
</pre>
</div><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/Recipes_002fSearch.html" class="_attribution-link">https://www.gnu.org/software/make/manual/html_node/Recipes_002fSearch.html</a>
</p>
</div>
|