Linux_01 _make/makefile

实现原理

基础实例

  • -o 后面需要紧跟生成文件的名称测试提交

  • make 是一条指令

  • makefile 是当前目录下的文件

mycode.c TO mycode(可执行文件)

1
2
3
4
mycode:mycode.c #依赖关系(其中mycode是目标文件,mycode.c是依赖文件)
gcc -o mycode mycode.c #依赖方法
clean:
rm -f mycode #这里只可以用TAB,不可以用四个空格代替
  • make指令自动查找当前目录下的makefile文件,会在其中找到第一个目标文件
  • 但用make指令,只会默认执行从上往下的第一个目标文件
  • 可以直接make mycode 因为clean不在第一个,所以需要make clean 去实现

对比先前方法

  • NEW

    • 直接输入touch makefile指令创建,用vim makefile写入上述代码内容

    • 在.c文件所在目录下直接make

    • 删除用make clearn

  • OLD

    • vim doc.c

    • gcc doc.c -o process 其中 - o 表示生成可执行文件, process为可执行文件文件名

    • ./process

应用实践

伪目标

  • 根据文件的修改时间和编译时间进行检测。同一条目标文件不可连续编译两次及以上。

  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被

    执行的。

    1
    2
    3
    .PHONY:clean
    clean:
    rm -f hello.i hello.s hello.o hello
  • 具体实例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    -rw-rw-r-- 1 sanshi sanshi 111 Jul  6 11:48 makefile

    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ vim mycode.c

    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ make
    gcc -o mycode mycode.c
    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ ./mycode
    hellloooooo!

    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ make
    gcc -o mycode mycode.c
    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ make
    gcc -o mycode mycode.c

    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ make clean
    rm -f mycode
    rm -f proc1.c proc1

    [sanshi@iZ2ze4xrxurbpglmuv68wlZ linux]$ ll
    total 8
    -rw-rw-r-- 1 sanshi sanshi 111 Jul 6 11:48 makefile
    -rw-rw-r-- 1 sanshi sanshi 79 Jul 6 11:49 mycode.c

    makefile

特殊符号

  • 在依赖方法处有更简介的符号写法$@ 目标文件, $^ 依赖文件

    1
    2
    3
    4
    5
    6
    mycode:mycode.c 
    gcc -o mycode mycode.c

    # 可以简写为
    mycode:mycode.c
    gcc -o $@ $^