make和makefile的用法笔记

 
  • make 默认使用的 shell /bin/sh 。也就是说,如果没有明确指定,那么对所有规则中命令行的解析使用“ /bin/sh” 来完成。 make 对所有规则命令的解析使用 make 自身的环境变量“ SHELL” 所指定的那个程序,所以在 GNU make 中,默认的程序是“ /bin/sh”
  • makefile 中以“ #” 开头到该行末尾的字符被当作是注释。
  • 要执行的命令行以字符“ @” 开始,则 make 在执行时这个命令就不会被回显。典型的用法是我们在使用“ echo” 命令输出一些信息时。
  • 运行时候带上“ -n” 或“ --just-print” ,那么 make 执行时只显示所要执行的命令,但不会真正的去执行这些命令。只有在这种情况下 make 才会打印出所有 make 需要执行的命令,其中也包括了使用“ @” 字符开始的命令。
  • make 参数“ -s” 或“ --slient” 则是禁止所有执行命令的显示,就好像所有的命令行均使用“ @” 开始一样。
  • Makefile 中使用没有依赖的特殊目标“ .SILENT” 也可以禁止命令的回显。
  • Makefile 中书写在同一行中的多个命令属于一个完整的 shell 命令行,书写在独立行的一条命令是一个独立的 shell 命令行。
  • 注意:在一个规则的命令中,命令行“ cd” 改变目录不会对其后的命令的执行产生影响。就是说其后的命令执行的工作目录不会是之前使用“ cd” 进入的那个目录。如果要实现这个目的,就不能把“ cd” 和其后的命令放在两行来书写。而应该把这两条命令写在一行上,用分号分隔。这样它们才是一个完整的 shell 命令行。
  • 反斜杠( / )来对处于多行的命令进行连接,表示他们是一个完整的 shell 命令行。这样就可以把一行的命令分成几行来写,是文件结构清晰。
  • 通常情况下,运行 make 在一个时刻只有一个命令在执行。可以通过 make 的命令行选项“ -j” 或者“ --job” 来告诉 make 在同一时刻可以允许多条命令同时被执行。选项“ -j” 之后存在一个整数,其含义是告诉 make 在同一时刻可允许同时执行命令的数目。这个数字被称为“ job slots” 。当“ -j” 选项之后没有出现一个数字时,那么同一时刻执行的命令数目没有要求。使用默认的“ job slots” ,其值为 1 注意 :此当同一时刻存在多个执行命令的进程需要读取标准输入流时其它的将会出输入流无效导致致命错误(通常此进程会得到操作系统的管道破裂信号而被终止)。对这个问题的解决。我们可以修改 Makefile 的规则命令使之在执行过程中不使用标准输入设备。当然也可以实现在只存在一个命令在执行时会访问标准输入流的 Makefile
  • Make 在执行一个命令时,如果某一条命令执行失败(被一个信号中止,或非零退出),且该条命令产生的错误不可忽略。此种情况下,如果 make 没有使用“ -k” 或“ --keep-going” 选项, make 将等到所有这些子进程结束之后停止继续执行直接退出。
  • -l” 选项告诉 make 限制当前运行的任务的数量( make 所限制的只是它本身所需要占用的系统负载,而不能通过它去控制其它的任务所占用的系统负载)。“ -l” 或“ --max-load” 选项一般后边需要跟一个浮点数。“ -l 1.2” 意思是告诉 make 当系统平均负荷高于 1.2 时,不再启动任何执行命令的子任务。不带浮点数的“ -l” 选项用于取消前面通“ -l” 给定的负荷限制。
  • 如果一个规则中的某一个命令出错(返回状态非 0 ), make 就会放弃对当前规则的执行,也有可能会终止所有规则的执行。
  • 在命令之前加一个减号“ -” (在 [Tab] 字符之后),来告诉 make 忽略此命令的执行失败。

你可能感兴趣的:(Linux相关技术,makefile,shell,任务,工作)