GNU Info

Info Node: (make.info)Shell Function

(make.info)Shell Function


Next: Make Control Functions Prev: Origin Function Up: Functions
Enter node , (file) or (file)node

The `shell' Function
====================

   The `shell' function is unlike any other function except the
`wildcard' function (Note: The Function `wildcard'.)
in that it communicates with the world outside of `make'.

   The `shell' function performs the same function that backquotes
(``') perform in most shells: it does "command expansion".  This means
that it takes an argument that is a shell command and returns the
output of the command.  The only processing `make' does on the result,
before substituting it into the surrounding text, is to convert each
newline or carriage-return / newline pair to a single space.  It also
removes the trailing (carriage-return and) newline, if it's the last
thing in the result.

   The commands run by calls to the `shell' function are run when the
function calls are expanded.  In most cases, this is when the makefile
is read in.  The exception is that function calls in the commands of
the rules are expanded when the commands are run, and this applies to
`shell' function calls like all others. When make gets ready to build a
target, it evaluates all commands needed to build that target at once,
before the first line is invoked.

   Here are some examples of the use of the `shell' function:

     contents := $(shell cat foo)

sets `contents' to the contents of the file `foo', with a space (rather
than a newline) separating each line.

     files := $(shell echo *.c)

sets `files' to the expansion of `*.c'.  Unless `make' is using a very
strange shell, this has the same result as `$(wildcard *.c)'.


automatically generated by info2www version 1.2.2.9