DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(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