makefile的结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/king_qg/article/details/80984767

    makefile是有一些列规则组成的,规则分为目标,先决条件和命令三个部分,先决条件和命令都是可以省略的。

    targets是目标,可以有多个,中间用空格分隔。prerequisites是先决条件,也可以有多个,中间也是用空格分隔,cmdx是需要执行的命令,需要注意的是命令前都是TAB键,不能用空格代替,空格和TAB在makefile中是严格区分的,可以说TAB键可以告诉我们这行是一个命令行。语法的东西没什么敲掉的,记住就行。

    我们需要知道的是一些概念的东西,没有概念支撑的学习都是不牢固的。先来讲述一下规则中三个组成部分的含义:targets通常是我们需要生成的文件名或者是一个标签(伪目标),prerequisites是我们要完成这个规则前必须要先完成另外那些targets,cmdx就是我们为了完成这一条规则需要执行那些命令。

    我们前面说了很多执行一条规则,那么什么时候规则才会执行呢,总结如下:

        规则省略了先决条件:

            目标对应的文件不存在:执行规则当中的命令

            目标对应的文件已存在:不执行规则当中的命令

        规则未省略先决条件:

            目标对应的文件不存在:执行规则当中的命令

            目标对应的文件已存在:先决条件中只要有目标比目标文件新就执行规则中的命令,否则就不执行

    小技巧:

        1、通常将第一个规则中的目标定义成最后生成的可执行文件名和all(all 是一个伪目标),这样当我们执行make时,如果已经生成了可执行文件,我们就不需要执行了,除非依赖更新了,这样避免了无谓的动作。当我们需要强制更新一下最终生成的可执行文件时,我们可以使用make all的方式进行。

        2、在makefile中书写较长的文本时,我们可以使用“\”续行符来使得文件的可读性更好。

        3、通过在makefile中命令前@符号,我们可以使得命令无回显,这样更具有可读性。

            

猜你喜欢

转载自blog.csdn.net/king_qg/article/details/80984767