makefile——命令

  • 每条命令的开头必须以[Tab]键开头,除非是紧跟在依赖规则后面的分号后的。
  • 在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。
  • make 的命令默认是被 “/bin/sh”,UNIX 的标准 Shell 解释执行的,除非特别指定一个其它的 Shell 。
  • makefile 中,“#” 是注释符,其后的本行字符都被注释。

显示命令

  • make 会把其要执行的命令行在命令执行前输出到屏幕上,用“@”字符在命令行前,这个命令将不被 make 显示出来。
  • make 带参数 “-n” 或 “–just-print”,只是显示命令,但不会执行命令,可用于调试。
  • make 带参数 “-s” 或 “–slient” 则是全面禁止命令的显示。

命令执行

  • 如果要让上一条命令的结果应用在下一条命令时,应该使用分号分隔这两条命令,不能把这两条命令写在两行上,否则将不起作用,与预想有差异。
  • make 一般是使用环境变量 SHELL 中所定义的系统 Shell 来执行命令,默认情况下使用UNIX 的标准 Shell “/bin/sh” 来执行命令。

命令出错

每当命令运行完后,make 会检测每个命令的返回码,如果成功,make 会执行下一条命令,直到规则成功完成,如果出错,make 就会终止执行当前规 则,这将有可能终止所有规则的执行,但有时候命令的出错并不表示就是错误的。

  • 在makefile 的命令行前加一个减号 “-” (在 Tab 键之后),标记为不管命令是否出错都认为是成功的。
  • make 带上“-i” 或是 “–ignore-errors” 参数,makefile 中所有命令都会忽略错误。
  • 如果一个规则是以 “.IGNORE” 作为目标的,那么这个规则中的所有命令将会忽略错误。
  • make 带参数 “-k” 或 “–keep-going”, 那么某规则中的命令出错了,就终止该规则的执行,但继续执行其它规则。

嵌套 make

不同模块或是不同功能的源文件放在不同的目录中, 在每个目录中都书写一个该目录的 makefile,然后总控 makefile 嵌套执行,这有利于模块编译和分段编译。

  • 总控 makefile 的变量可以传递到下级的 makefile 中(显示声明),不会覆盖下层的 makefile 中所定义的变量( 除非指定了 “-e” 参数)。
export variable = value #声明传递变量到下级
unexport variable = value #声明不要传递变量到下级
export #传递所有变量
  • 两个变量SHELL、MAKEFLAGS 不管是否 export,其总是要传递到下层 makefile 中。上级定义了 MAKEFLAGS, 其包含了 make 的参数信息,是一个系统级的环境变量,如果不想往下传递,可以让MAKEFLAGS=,否则谨慎定义。
  • make 命令中的有几个参数并不往下传递,它们是 “-C”,“-f”,“-h”,“-o”,“-W”。
  • make 带上参数 “-w” 或 “–print-directory”,会在执行过程中输出目前的工作目录。当使用 “-C” 参数来指定 make 下层 makefile 时,“-w” 会被自动打开,如果参数中有 “-s”(“–slient”)或 “–no-print-directory”,则 “-w” 总是失效的。

定义命令包

如果 makefile 中出现一些相同命令序列,那么可以为这些相同的命令序列定义成一个变量(相当于宏),变量名就是这个命令包的名字,定义这种命令序列的语法以 “define” 开始,以 “endef” 结束。

define test
#命令序列
endef
$(test) #调用命令包变量(变量名不得与其它变量名重复)

make 在执行命令包时,命令包中的每个命令会被 依次独立执行。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值