美文网首页
makefile 中的include规则

makefile 中的include规则

作者: Jesson3264 | 来源:发表于2021-08-14 18:19 被阅读0次

    include 的规则

    Rule1 include 前面的减号,会忽略错误,当错误发生时,make 将忽略这些错误

    实例代码

    .PHONY:all
    -include test.txt
    
    all:
        @echo "this is all."
    
    

    当前目录下是没有 test.txt 的文件的, 执行make, 可以看到:

    this is all.
    

    去掉横杠

    .PHONY:all
    include test.txt
    
    all:
        @echo "this is all."
    
    test.txt:
        @echo " execuate test.txt"
    

    包括,并终止makefile继续往下执行

    makefile:2: test.txt: No such file or directory
    make: *** No rule to make target `test.txt'.  Stop.
    

    Rule2 当包含的文件不存在时,make会去寻找同名的规则,这里的 test.txt,并执行规则下面的指令

    来上一段实例代码,当前目录下面没有 test.txt 文件,但是我们增加了一条规则 test.txt,代码如下:

    .PHONY:all
    include test.txt
    
    all:
            @echo "this is all."
    
    test.txt:
            @echo "execuate test.txt"
    
    

    直接看输出:

    makefile:2: test.txt: No such file or directory
    execuate test.txt
    this is all.
    

    可以看到执行第二条语句 include test.txt 的时候,打印没有找到文件或者目录,紧接着打印了test.txt规则下的内容。再继续执行了 all 规则。

    Rule3 如果包含的文件存在,则会把文件内容加载到include指令处,并检查文件名对应的规则

    前半句好理解,后半句,我们结合一个例子来说明

    .PHONY:all
    include test.txt
    
    all:
            @echo "this is all."
    
    test.txt: b.txt
            @echo "in test.txt"
    

    执行结果如下

    % make
    this is all.
    % touch b.txt
    % ls
    b.txt  makefile  test.txt
    % make
    in test.txt
    this is all.
    

    test.txt 没有内容,当 b.txt 不存在时,make 的时候,只打印了this is all, 还不能看出来test.txt规则有没有执行。这个时候我们touch b.txt ,显然,这个时候 test.txt 文件比 b.txt 要久了,再次make,这个时候先执行include,把 test.txt内容加载到当前位置,然后去检查test.txt规则,我们发现了** in test.txt**这段文字是打印了的。

    基于这几个规则,我们后续可以通过识别.c文件的依赖,写入到文件中,同时make的时候,识别.c文件的依赖文件是否更新了,来触发改动文件的编译。

    总结include 指令的规则如下:

    • 当目标文件不存在时
      以文件名为查找规则,并执行

    • 当目标文件不存在,且查找到的规则中创建了目标文件
      将创建成功的目标文件包含进当前makefile

    • 当目标文件存在
      将目标文件包含进当前 makefile
      以目标文件名查找是否有相应规则
      有:比较规则的依赖关系,决定是否执行规则命令
      否:无操作

    • 当目标文件存在
      当规则文件存在,且目标名对应的规则被执行
      规则中的命令更新了目标文件
      make 重新包含目标文件,替换之前包含的内容
      目标文件未被更新
      无操作

    相关文章

      网友评论

          本文标题:makefile 中的include规则

          本文链接:https://www.haomeiwen.com/subject/koyebltx.html