Make学习

Make 是个啥?
是最常用的构建工具。

MakeFile文件的格式

// 目标:前置条件
<target> : <prerequisites>
// tab + 命令
[tab] <commands>
  • 目标(target)
    目标通常是文件名, 指明Make命令所要构建的对象。
    还可以是某个操作的名字,这被称为“伪目标”。

    clean:
      rm *.js
    

    上面代码的目标是clean,它不是文件名,而是一个操作的名字,属于“伪目标”。

  • 前置条件
    前置条件通常是一组文件名,之间用空格分隔,它指定了"目标"是否重新构建的判断标准:只要有一个前置文件不存在,或者有过更新(前置文件的last-modification时间戳比目标的时间戳新),"目标"就需要重新构建。

    result.txt: source.txt
      cp source.txt result.txt
    

    构建 result.txt 的前置条件是 source.txt, 如果当前目录中,source.txt 已经存在,那么make result.txt可以正常运行。

    小实例:

    a.txt: b.txt
        cp b.txt a.txt
    
    // 无先决条件,不依赖任何文件	
    b.txt:
        echo "this is b.txt file" > b.txt
    
  • 命令
    命令(commands)表示如何更新目标文件,由一行或多行的Shell命令组成。它是构建"目标"的具体指令,它的运行结果通常就是生成目标文件。
    需要注意的是,每行命令在一个单独的shell中执行。这些Shell之间没有继承关系。
    解决上述问题:

    • 将两行命令写在一行,中间用分号分隔。
    • 在换行符前加反斜杠转义。
    • 最后一个方法是加上.ONESHELL:命令。

MakeFile 文件语法

注释使用 # 符号。
可以使用等号自定义变量。

txt = Hello World
test:
    @echo $(txt)