unexport VARIABLE ... 为方便起见,可以在定义变量时输出它: export VARIABLE = value 和 VARIABLE = value export VARIABLE 作用相同。 假如要输出所有的变量,使用’export’指令本身就可以了。 变量’MAKELEVEL’在一级一级传递时会改变,这个变量的值是表示嵌套层数的字符串,顶级’make’是,变量的值为’0’;子make的值为’1’;子子make的值为’2’,依此类推。 ‘MAKELEVEL’的用途是在条件指令中测试它,这样写出在递归运行时和直接运行时表现不同的makefile。 以下内容拷贝自GNU Make Manual 5.命令行参数 `-b' `-m' These options are ignored for compatibility with other versions of `make'.`-C DIR' `--directory=DIR' Change to directory DIR before reading the makefiles. If multiple `-C' options are specified, each is interpreted relative to the previous one: `-C / -C etc' is equivalent to `-C /etc'. This is typically used with recursive invocations of `make' (*note Recursive Use of `make': Recursion.).`-d' `--debug' Print debugging information in addition to normal processing. The debugging information says which files are being considered for remaking, which file-times are being compared and with what results, which files actually need to be remade, which implicit rules are considered and which are applied--everything interesting about how `make' decides what to do.`-e' `--environment-overrides' Give variables taken from the environment precedence over variables from makefiles. *Note Variables from the Environment: Environment.`-f FILE' `--file=FILE' `--makefile=FILE' Read the file named FILE as a makefile. `-h' `--help' Remind you of the options that `make' understands and then exit. `-i' `--ignore-errors' Ignore all errors in commands executed to remake files. `-I DIR' `--include-dir=DIR' Specifies a directory DIR to search for included makefiles. If several `-I' options are used to specify several directories, the directories are searched in the order specified.`-j [JOBS]' `--jobs=[JOBS]' Specifies the number of jobs (commands) to run simultaneously. With no argument, `make' runs as many jobs simultaneously as possible. If there is more than one `-j' option, the last one is effective. `-k' `--keep-going' Continue as much as possible after an error. While the target that failed, and those that depend on it, cannot be remade, the other dependencies of these targets can be processed all the same.`-l [LOAD]' `--load-average[=LOAD]' `--max-load[=LOAD]' Specifies that no new jobs (commands) should be started if there are other jobs running and the load average is at least LOAD (a floating-point number). With no argument, removes a previous load limit. *Note Parallel Execution: Parallel.`-n' `--just-print' `--dry-run' `--recon' Print the commands that would be executed, but do not execute them. `-o FILE' `--old-file=FILE' `--assume-old=FILE' Do not remake the file FILE even if it is older than its dependencies, and do not remake anything on account of changes in
FILE. Essentially the file is treated as very old and its rules are ignored. `-p' `--print-data-base' Print the data base (rules and variable values) that results from reading the makefiles; then execute as usual or as otherwise specified. This also prints the version information given by the `-v' switch (see below). To print the data base without trying to remake any files, use `make -p -f /dev/null'.`-q' `--question' "Question mode". Do not run any commands, or print anything; just return an exit status that is zero if the specified targets are already up to date, one if any remaking is required, or two if an error is encountered. `-r' `--no-builtin-rules' Eliminate use of the built-in implicit rules.You can still define your own by writing pattern rules. The `-r' option also clears out the default list of suffixes for suffix rules .But you can still define your own suffixes with a rule for `.SUFFIXES', and then define your own suffix rules.`-s' `--silent' `--quiet' Silent Operation; do not print the commands as they are executed. `-S' `--no-keep-going' `--stop' Cancel the effect of the `-k' option. This is never necessary except in a recursive `make' where `-k' might be inherited from the top-level `make' via `MAKEFLAGS' or if you set `-k' in `MAKEFLAGS' in your environment.`-t' `--touch' Touch files (mark them up to date without really changing them) instead of running their commands. This is used to pretend that the commands were done, in order to fool future invocations of `make'. `-v' `--version' Print the version of the `make' program plus a copyright, a list of authors, and a notice that there is no warranty; then exit. `-w' `--print-directory' Print a message containing the working directory both before and after executing the makefile. This may be useful for tracking down errors from complicated nests of recursive `make' commands.`--no-print-directory' Disable printing of the working directory under `-w'. This option is useful when `-w' is turned on automatically, but you do not want to see the extra messages. `-W FILE' `--what-if=FILE' `--new-file=FILE' `--assume-new=FILE' Pretend that the target FILE has just been modified. When used with the `-n' flag, this shows you what would happen if you were to modify that file. Without `-n', it is almost the same as running a `touch' command on the given file before running `make', except that the modification time is changed only in the imagination of `make'. `--warn-undefined-variables' Issue a warning message whenever `make' sees a reference to an undefined variable. This can be helpful when you are trying to debug makefiles which use variables in complex ways.6.参考 6.1.指令 `define VARIABLE' `endef' Define a multi-line, recursively-expanded variable.
*Note Sequences::.`ifdef VARIABLE' `ifndef VARIABLE' `ifeq (A,B)' `ifeq "A" "B"' `ifeq 'A' 'B'' `ifneq (A,B)' `ifneq "A" "B"' `ifneq 'A' 'B'' `else' `endif' Conditionally evaluate part of the makefile.`include FILE' Include another makefile.`override VARIABLE = VALUE' `override VARIABLE := VALUE' `override VARIABLE += VALUE' `override define VARIABLE' `endef' Define a variable, overriding any previous definition, even one from the command line. `export' Tell `make' to export all variables to child processes by default.`export VARIABLE' `export VARIABLE = VALUE' `export VARIABLE := VALUE' `export VARIABLE += VALUE' `unexport VARIABLE' Tell `make' whether or not to export a particular variable to child processes. `vpath PATTERN PATH' Specify a search path for files matching a `%' pattern. *Note The `vpath' Directive: Selective Search.`vpath PATTERN' Remove all search paths previously specified for PATTERN.`vpath' Remove all search paths previously specified in any `vpath' directive. 6.2.函数 `$(subst FROM,TO,TEXT)' Replace FROM with TO in TEXT.`$(patsubst PATTERN,REPLACEMENT,TEXT)' Replace Words matching PATTERN with REPLACEMENT in TEXT.`$(strip STRING)' Remove excess whitespace characters from STRING.`$(findstring FIND,TEXT)' Locate FIND in TEXT.`$(filter PATTERN...,TEXT)' Select words in TEXT that match one of the PATTERN words.`$(filter-out PATTERN...,TEXT)' Select words in TEXT that *do not* match any of the PATTERN words.`$(sort LIST)' Sort the words in LIST lexicographically, removing duplicates.`$(dir NAMES...)' Extract the directory part of each file name.`$(notdir NAMES...)' Extract the non-directory part of each file name.`$(suffix NAMES...)' Extract the suffix (the last `.' and following characters) of each file name.`$(basename NAMES...)' Extract the base name (name without suffix) of each file name.`$(addsuffix SUFFIX,NAMES...)' Append SUFFIX to each word in NAMES.`$(addprefix PREFIX,NAMES...)' Prepend PREFIX to each word in NAMES.`$(join LIST1,LIST2)' Join two parallel lists of words.`$(word N,TEXT)' Extract the Nth word (one-origin) of TEXT.`$(words TEXT)' Count the number of words in TEXT.`$(firstword NAMES...)' Extract the first word of NAMES.`$(wildcard PATTERN...)' Find file names matching a shell file name pattern (*not* a `%' pattern).`$(shell COMMAND)' Execute a shell command and return its output.`$(origin VARIABLE)' Return a string describing how the `make' variable VARIABLE was defined.`$(foreach VAR,WORDS,TEXT)' Evaluate TEXT with VAR bound to each word in WORDS, and
concatenate the results. 6.3.自动变量 `$@' The file name of the target.`$%' The target member name, when the target is an archive member.`$<' The name of the first dependency.`$?' The names of all the dependencies that are newer than the target, with spaces between them. For dependencies which are archive members, only the member named is used with spaces between them. For dependencies which are archive members, only the member named is used `$^' `$+' The names of all the dependencies, with spaces between them. For dependencies which are archive members, only the member named is used. The value of `$^' omits duplicate dependencies, while `$+' retains them and preserves their order.`$*' The stem with which an implicit rule matches `$(@D)' `$(@F)' The directory part and the file-within-directory part of `$@'.`$(*D)' `$(*F)' The directory part and the file-within-directory part of `$*'.`$(%D)' `$(%F)' The directory part and the file-within-directory part of `$%'`$(<D)' `$(<F)' The directory part and the file-within-directory part of `$<'`$(^D)' `$(^F)' The directory part and the file-within-directory part of `$^'`$(+D)' `$(+F)' The directory part and the file-within-directory part of `$+'`$(?D)' `$(?F)' The directory part and the file-within-directory part of `$?' 6.4.非凡变量 `MAKEFILES' Makefiles to be read on every invocation of `make'.`VPATH' Directory search path for files not found in the current directory.`SHELL' The name of the system default command interpreter, usually `/bin/sh'. You can set `SHELL' in the makefile to change the shell used to run commands. `MAKE' The name with which `make' was invoked. Using this variable in commands has special meaning. `MAKELEVEL' The number of levels of recursion (sub-`make's).`MAKEFLAGS' The flags given to `make'. You can set this in the environment or a makefile to set flags.`SUFFIXES' The default list of suffixes before `make' reads any makefiles.