Node:Implicit Variables, Next:Chained Rules, Previous:Catalogue of Rules, Up:Implicit Rules

### 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. You can cancel all variables used by implicit rules with the `-R` or `--no-builtin-variables` option.

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.