GNU Info

Info Node: (standards.info)Command Variables

(standards.info)Command Variables


Next: Directory Variables Prev: Utilities in Makefiles Up: Makefile Conventions
Enter node , (file) or (file)node

Variables for Specifying Commands
---------------------------------

   Makefiles should provide variables for overriding certain commands,
options, and so on.

   In particular, you should run most utility programs via variables.
Thus, if you use Bison, have a variable named `BISON' whose default
value is set with `BISON = bison', and refer to it with `$(BISON)'
whenever you need to use Bison.

   File management utilities such as `ln', `rm', `mv', and so on, need
not be referred to through variables in this way, since users don't
need to replace them with other programs.

   Each program-name variable should come with an options variable that
is used to supply options to the program.  Append `FLAGS' to the
program-name variable name to get the options variable name--for
example, `BISONFLAGS'.  (The names `CFLAGS' for the C compiler,
`YFLAGS' for yacc, and `LFLAGS' for lex, are exceptions to this rule,
but we keep them because they are standard.)  Use `CPPFLAGS' in any
compilation command that runs the preprocessor, and use `LDFLAGS' in
any compilation command that does linking as well as in any direct use
of `ld'.

   If there are C compiler options that _must_ be used for proper
compilation of certain files, do not include them in `CFLAGS'.  Users
expect to be able to specify `CFLAGS' freely themselves.  Instead,
arrange to pass the necessary options to the C compiler independently
of `CFLAGS', by writing them explicitly in the compilation commands or
by defining an implicit rule, like this:

     CFLAGS = -g
     ALL_CFLAGS = -I. $(CFLAGS)
     .c.o:
             $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<

   Do include the `-g' option in `CFLAGS', because that is not
_required_ for proper compilation.  You can consider it a default that
is only recommended.  If the package is set up so that it is compiled
with GCC by default, then you might as well include `-O' in the default
value of `CFLAGS' as well.

   Put `CFLAGS' last in the compilation command, after other variables
containing compiler options, so the user can use `CFLAGS' to override
the others.

   `CFLAGS' should be used in every invocation of the C compiler, both
those which do compilation and those which do linking.

   Every Makefile should define the variable `INSTALL', which is the
basic command for installing a file into the system.

   Every Makefile should also define the variables `INSTALL_PROGRAM'
and `INSTALL_DATA'.  (The default for `INSTALL_PROGRAM' should be
`$(INSTALL)'; the default for `INSTALL_DATA' should be `${INSTALL} -m
644'.)  Then it should use those variables as the commands for actual
installation, for executables and nonexecutables respectively.  Use
these variables as follows:

     $(INSTALL_PROGRAM) foo $(bindir)/foo
     $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a

   Optionally, you may prepend the value of `DESTDIR' to the target
filename.  Doing this allows the installer to create a snapshot of the
installation to be copied onto the real target filesystem later.  Do not
set the value of `DESTDIR' in your Makefile, and do not include it in
any installed files.  With support for `DESTDIR', the above examples
become:

     $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo
     $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a

Always use a file name, not a directory name, as the second argument of
the installation commands.  Use a separate command for each file to be
installed.


automatically generated by info2www version 1.2.2.9