DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(make.info.gz) Command Variables

Info Catalog (make.info.gz) Utilities in Makefiles (make.info.gz) Makefile Conventions (make.info.gz) Directory Variables
 
 14.3 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.
 
Info Catalog (make.info.gz) Utilities in Makefiles (make.info.gz) Makefile Conventions (make.info.gz) Directory Variables
automatically generated byinfo2html