makefile

makefile中的变量与bash中的变量,语法稍有不同,makefile变量的基本语法为:

变量之间用 = 隔开,且 = 两侧可以有空格
变量左边不可以有键空格
习惯上变量以大写字母
引用变量使用大括号或括号,如(变量)
$@表示当前的目标

为了避免与名为clean的文件冲突,最好在clean前面加.PHONY

makefile是这样定义的。

target ...: prerequisites
            command
            command

target代表的是一个 标的,prerequisites代表的是这个标的所依赖的标的,下面那个command就是生成这个标的的命令。

那么那个标的代表的是什么呢?其实它就是代表了一个与他同名的文件,编译之后生成的.o文件,编译链接之后生成的可执行文件或者其他任何类型的文件,例如main这个标的代表的就是main这个可执行文件。
exp:

main:
    gcc -o main main.c

它做的工作是这样的:
    1.查找makefile,默认执行第一个标的(即main)。
    2.检查main这个文件存不存在或者需不需要更新。
    3.如果main文件不存在,则执行下面那个gcc命令来生成这个文件。
    4.如果main文件已经存在,且它的修改时间要早于依赖文件的修改时间(即这个main文件过期了),那么执行下面的gcc命令来生成这个文件。

总结一下:

  • 1.makefile中的每个标的都代表了一个文件。
  • 2.如果只运行make命令,那么默认执行第一个标的。
  • 3.执行一个标的时,会做两件事情:
    • 3.1.查看与这个标的同名的文件是否存在,如果不存在,那么就运行这个标的下面的命令。
    • 3.2.如果与这个标的同名的文件已经存在,那么就检查与这个标的同名的文件是否需要更新(即标的文件的修改时间是否早于依赖文件的修改时间),如果需要更新,那么就运行这个标的下面的命令。

你可能感兴趣的:(makefile)