Make 的运行
有时候, 我们不想让我们的 makefile 中的规则执行起来, 我们只想检查一下我们的命令, 或是执行的序列. 于是我们可以使用 make 命令的下述参数:
- "-n"
- "--just-print"
- "--dry-run"
- "--recon"
不执行参数, 这些参数只是打印命令, 不管目标是否更新, 把规则和连带规则下的命令打印出来, 但不执行, 这些参数对于我们调试 makefile 很有用处. 比如 makefile 的文件如下:
- SHELL = /bin/bash
- sinclude test.d
- CC=gcc
- FLAGS=-i
- debug:
- echo -e -n "\t\x24(CC) \x24(FLAGS) -c main.c -o \x24@">> test.txt;
- @echo $(abc)
执行 make -just-print 得到结果如下:
- echo -e -n "\t\x24(CC) \x24(FLAGS) -c main.c -o \x24@">> test.txt;
- echo hello
- -debug[=<options>]
输出 make 的调试信息. 它有几种不同的级别可供选择, 如果没有参
数, 那就是输出最简单的调试信息. 下面是 < options > 的取值:
a -- 也就是 all, 输出所有的调试信息.(会非常的多)
b -- 也就是 basic, 只输出简单的调试信息. 即输出不需要重编译
的目标.
v -- 也就是 verbose, 在 b 选项的级别之上. 输出的信息包括哪个
makefile 被解析, 不需要被重编译的依赖文件 (或是依赖目标) 等.
i -- 也就是 implicit, 输出所以的隐含规则.
j -- 也就是 jobs, 输出执行规则中命令的详细信息, 如命令的 PID,
返回码等.
m -- 也就是 makefile, 输出 make 读取 makefile, 更新 makefile, 执行 makefile 的信息.
-v 的的执行结果
- GNU Make 4.1
- Built for x86_64-pc-Linux-gnu
- Copyright (C) 1988-2014 Free Software Foundation, Inc.
- License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
正在读入 makefiles...
- Reading makefile 'makefile.cfg'...
- Reading makefile 'test.d' (搜索路径) (不用理) (没有 ~ 扩展)...
更新目标....
Considering target file 'debug'.
- Finished prerequisites of target file 'debug'.
- No need to remake target 'debug'.
- make: 'debug' is up to date.
- "-d"
相当于 "--debug=a".
- "-e"
- "--environment-overrides"
指明环境变量的值覆盖 makefile 中定义的变量的值.
- "-f=<file>"
- "--file=<file>"
- "--makefile=<file>"
指定需要执行的 makefile.
"-h"
"--help"
显示帮助信息.
- "-i"
- "--ignore-errors"
在执行时忽略所有的错误.
- "-I <dir>"
- "--include-dir=<dir>"
指定一个被包含 makefile 的搜索目标. 可以使用多个 "-I" 参数来指定
多个目录.
- "-j [<jobsnum>]"
- "--jobs[=<jobsnum>]"
指同时运行命令的个数. 如果没有这个参数, make 运行命令时能运行多少就运行多少. 如果有一个以上的 "-j" 参数, 那么仅最后一个 "-j" 才是有效的.(注意这个参数在 MS-DOS 中是无用的)
- "-k"
- "--keep-going"
出错也不停止运行. 如果生成一个目标失败了, 那么依赖于其上的目标就不会被执行了.
- "-l <load>"
- "--load-average[=<load]"
- "-max-load[=<load>]"
指定 make 运行命令的负载.
- "-n"
- "--just-print"
- "--dry-run"
- "--recon"
仅输出执行过程中的命令序列, 但并不执行.
- "-o <file>"
- "--old-file=<file>"
- "--assume-old=<file>"
不重新生成的指定的 < file>, 即使这个目标的依赖文件新于它.
- "-p"
- "--print-data-base"
输出 makefile 中的所有数据, 包括所有的规则和变量. 这个参数会让一个简单的 makefile 都会输出一堆信息. 如果你只是想输出信息而不想执行 makefile, 你可以使用 "make -qp" 命令. 如果你想查看执行 makefile 前的预设变量和规则, 你可以使用 "make -p -f /dev/null". 这个参数输出的信息会包含着你的 makefile 文件的文件名和行号, 所以, 用这个参数来调试你的 makefile 会是很有用的, 特别是当你的环境变量很复杂的时候.
- "-q"
- "--question"
不运行命令, 也不输出. 仅仅是检查所指定的目标是否需要更新. 如果是 0 则说明要更新, 如果是 2 则说明有错误发生.
- "-r"
- "--no-builtin-rules"
禁止 make 使用任何隐含规则.
- "-R"
- "--no-builtin-variabes"
禁止 make 使用任何作用于变量上的隐含规则.
- "-s"
- "--silent"
- "--quiet"
在命令运行时不输出命令的输出.
- "-S"
- "--no-keep-going"
- "--stop"
取消 "-k" 选项的作用. 因为有些时候, make 的选项是从环境变量 "MAKEFLAGS" 中继承下来的. 所以你可以在命令行中使用这个参数来让环境变量中的 "-k" 选项失效.
"-t"
"--touch"
相当于 UNIX 的 touch 命令, 只是把目标的修改日期变成最新的, 也就是阻止生成目标的命令运行.
"-v"
"--version"
输出 make 程序的版本, 版权等关于 make 的信息.
- "-w"
- "--print-directory"
输出运行 makefile 之前和之后的信息. 这个参数对于跟踪嵌套式调用 make 时很有用.
"--no-print-directory"
禁止 "-w" 选项.
- "-W <file>"
- "--what-if=<file>"
- "--new-file=<file>"
- "--assume-file=<file>"
假定目标 < file > 需要更新, 如果和 "-n" 选项使用, 那么这个参数会输出该目标更新时的运行动作. 如果没有 "-n" 那么就像运行 UNIX 的
"touch" 命令一样, 使得 < file > 的修改时间为当前时间.
"--warn-undefined-variables"
只要 make 发现有未定义的变量, 那么就输出警告信息
来源: http://www.bubuko.com/infodetail-2915540.html