• make简介


    首先make可以简单甘分为make_zhi()同埋ni_make(a)两种带参数同埋不带参数嘅函数。

    博君一笑啫,切入正题。。。。

    make对Makefile进行处理,将距变成shell可执行嘅脚本,最后由shell解释器来执行有make翻译过嘅脚本。并且系翻译一句然后shell执行一句

    ^-^  make中有潜规则:只要make看到一个.o文件,它就会自动甘把对应的.c文件加到依赖文件中,而且gcc c  .c都会被推导出来

    就好似

    /*makefile*/

    CC = gcc
    OBJ = main.o mytool1.o mytool2.o

    make: $(OBJ)
            $(CC) -o main $(OBJ)

    main.o: mytool1.h mytool2.h    //隐藏嘅命令式gcc -c  main.c
    mytool1.o: mytool1.h   //同样系潜规则
    mytool2.o: mytool2.h    //一样


    .PHONY: clean
    clean:
            rm -f main $(OBJ)

    makefile中有一D内置宏,分别系$@$^$<。代表的意义分别系:
    $@--目标文件,
    $^--所有嘅依赖文件,
    $<--第一个依赖文件。

    可改写为

    /*makefile*/

    CC = gcc
    OBJ = main.o mytool1.o mytool2.o

    main: $(OBJ)
            $(CC) -o $@ $^

    main.o: main.c mytool1.h mytool2.h
            $(CC) -c $<
    mytool1.o: mytool1.c mytool1.h
            $(CC) -c $<
    mytool2.o: mytool2.c mytool2.h
            $(CC) -c $<

    .PHONY: clean    //假目标避免和同名文件冲突,否则无依赖clean文件永远系最新,不必执行后面嘅命令
    clean:
            rm -f main $(OBJ)// 伪指令,不生成目标

     

    总之make就系N多个gcc -c自动化执行脚本,另外听讲linux下有个automake可以避免出错

  • 相关阅读:
    YL杯超级篮球赛 (Standard IO)
    Window (Standard IO)
    toj1026 Network 双连通分量
    poj3177 Redundant Paths 双连通分量
    poj1144 Network 双连通分量
    bzoj1269
    bzoj1800
    CF911D
    CF910C
    CF910B
  • 原文地址:https://www.cnblogs.com/encode/p/2545333.html
Copyright © 2020-2023  润新知