Go to the first, previous, next, last section, table of contents.

## Variables Used by Implicit Rules

The commands in built-in implicit rules make liberal use of certain predefined variables. You can alter these variables in the makefile, with arguments to `make`, or in the environment to alter how the implicit rules work without redefining the rules themselves.

For example, the command used to compile a C source file actually says ``$(CC) -c $(CFLAGS) $(CPPFLAGS)'`. The default values of the variables used are ``cc'` and nothing, resulting in the command ``cc -c'`. By redefining ``CC'` to ``ncc'`, you could cause ``ncc'` to be used for all C compilations performed by the implicit rule. By redefining ``CFLAGS'` to be ``-g'`, you could pass the ``-g'` option to each compilation. All implicit rules that do C compilation use ``$(CC)'` to get the program name for the compiler and all include ``$(CFLAGS)'` among the arguments given to the compiler.

The variables used in implicit rules fall into two classes: those that are names of programs (like `CC`) and those that contain arguments for the programs (like `CFLAGS`). (The "name of a program" may also contain some command arguments, but it must start with an actual executable program name.) If a variable value contains more than one argument, separate them with spaces.

Here is a table of variables used as names of programs in built-in rules:

`AR`
  Archive-maintaining program; default ``ar'`.
`AS`
  Program for doing assembly; default ``as'`.
`CC`
  Program for compiling C programs; default ``cc'`.
`CXX`
  Program for compiling C++ programs; default ``g++'`.
`CO`
  Program for extracting a file from RCS; default ``co'`.
`CPP`
  Program for running the C preprocessor, with results to standard output; default ``$(CC) -E'`.
`FC`
  Program for compiling or preprocessing Fortran and Ratfor programs; default ``f77'`.
`GET`
  Program for extracting a file from SCCS; default ``get'`.
`LEX`
  Program to use to turn Lex grammars into C programs or Ratfor programs; default ``lex'`.
`PC`
  Program for compiling Pascal programs; default ``pc'`.
`YACC`
  Program to use to turn Yacc grammars into C programs; default ``yacc'`.
`YACCR`
  Program to use to turn Yacc grammars into Ratfor programs; default ``yacc -r'`.
`MAKEINFO`
  Program to convert a Texinfo source file into an Info file; default ``makeinfo'`.
`TEX`
  Program to make TeX DVI files from TeX source; default ``tex'`.
`TEXI2DVI`
  Program to make TeX DVI files from Texinfo source; default ``texi2dvi'`.
`WEAVE`
  Program to translate Web into TeX; default ``weave'`.
`CWEAVE`
  Program to translate C Web into TeX; default ``cweave'`.
`TANGLE`
  Program to translate Web into Pascal; default ``tangle'`.
`CTANGLE`
  Program to translate C Web into C; default ``ctangle'`.
`RM`
  Command to remove a file; default ``rm -f'`.

Here is a table of variables whose values are additional arguments for the programs above. The default values for all of these is the empty string, unless otherwise noted.

`ARFLAGS`
  Flags to give the archive-maintaining program; default ``rv'`.
`ASFLAGS`
  Extra flags to give to the assembler (when explicitly invoked on a ``.s'` or ``.S'` file).
`CFLAGS`
  Extra flags to give to the C compiler.
`CXXFLAGS`
  Extra flags to give to the C++ compiler.
`COFLAGS`
  Extra flags to give to the RCS `co` program.
`CPPFLAGS`
  Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers).
`FFLAGS`
  Extra flags to give to the Fortran compiler.
`GFLAGS`
  Extra flags to give to the SCCS `get` program.
`LDFLAGS`
  Extra flags to give to compilers when they are supposed to invoke the linker, ``ld'`.
`LFLAGS`
  Extra flags to give to Lex.
`PFLAGS`
  Extra flags to give to the Pascal compiler.
`RFLAGS`
  Extra flags to give to the Fortran compiler for Ratfor programs.
`YFLAGS`
  Extra flags to give to Yacc.

Go to the first, previous, next, last section, table of contents.