make与Makefile

make与Makefile

多个文件编译,须要提供一个makefile文件用它来一层层的自动化编译目标文件html

makefile

  • 整个的编写流程应该以下:
    all:main
    main(目标文件): x.o b.o(依赖文件)
    (TAB)gcc -o main x.o b.o(命令)
    x.o: x.c
    (TAB)gcc -c x.c
    b.o: b.c
    (TAB)gcc -c b.c
    ...
    ...
  • 另外若是存在一行写不完须要中途换行的状况下,那就须要使用 / 进行换行
    例如说:
    main: a.o b.o c.o d.o e.o /
    f.o h.o i.o
  • 除了all以外,makefile一样能够指定目标,即以下:
    clean:
    rm -f *.o
    这是咱们经常使用的一种目标方式,当工做目录没有clean这个文件时候,make clean就会执行删除命令
  • 那么若是咱们须要在即便是有clean文件的状况下依然执行make clean,则咱们须要加入伪目标,将clean声明为伪目标以后,不论存不存在clean文件,都能正常的是执行删除,语法以下:
    .PHONY:clean
    clean:
    rm -f *.o
  • 若是想为Makefile提供输出提示,那么能够:
    @echo 正在编译xxxx模块
    若是不加@那么echo会被显示,就相似于Windows批处理的输出,@意思是隐藏回显
  • 若是想要Make去执行多个脚本命令,那么须要在命令之间以分号隔开:
    test:
    cd ./test/; pwd
  • 若是须要忽略makefile中的错误命令信息,那么能够在相关命令上加入‘-’或者指定make的-i参数
    make -i
    或者
    test:
    -cd ./test/
  • makefile一样能够加入条件语句
    ifeq($1, $2)
    else
    endif
    或者
    (if <condition>,<then-part>)
    (if <condition>,<then-part>,<else-part>)
  • makefile能够加入路径的设置 VPATH
    VPATH <directories> :: 当前目录中找不到文件时, 就从<directories>中搜索
    VPATH <pattern> <directories> :: 符合<pattern>格式的文件, 就从<directories>中搜索
    VPATH <pattern> :: 清除符合<pattern>格式的文件搜索路径
    VPATH :: 清除全部已经设置好的文件路径
  • makefile中的定义变量和使用
    variable = %.h
    all: $(variable)

Make的运行

  • 那么当咱们执行make时候,make的运行过程是怎么样的呢?
    1. make在当前目录下依次搜索下面3个文件 "GNUmakefile", "makefile", "Makefile"(推荐使用Makefile)
    2. 以第一个目标文件为终极目标,开始进行推导,若是说没有这个文件,或者目标依赖文件改动时间比目标文件生成时间新,那么就会对相关项进行新的生成;
    3. 若是依赖文件也不存在,那么make会查找makefile文件中以缺失的依赖文件为目标的相关项进行生成
  • 查看文件的依赖关系,gcc 所使用的命令,能够查看后直接放入makefile做为目标用

    gcc -MM kvm_main.c多线程

  • make能够增长的参数
    --debug[=<options>] 输出make的调试信息, options 能够是 a, b, v
    -j --jos 同时运行的命令的个数, 也就是多线程执行 Makefile
    -r --no-builtin-rules 禁止使用任何隐含规则
    -R --no-builtin-variabes 禁止使用任何做用于变量上的隐含规则
    -B --always-make 假设全部目标都有更新, 即强制重编译
    -i --ignore-error 忽略命令的错误返回
  • 命令变量
    RM rm -f
    AR ar
    CC cc
    CXX g++
  • 约定俗称的伪目标

    all 全部目标的目标,其功能通常是编译全部的目标
    clean 删除全部被make建立的文件
    install 安装已编译好的程序,其实就是把目标可执行文件拷贝到指定的目录中去
    print 列出改变过的源文件
    tar 把源程序打包备份. 也就是一个tar文件
    dist 建立一个压缩文件, 通常是把tar文件压成Z文件. 或是gz文件
    TAGS 更新全部的目标, 以备完整地重编译使用
    check 或 test 通常用来测试makefile的流程

资料参考:
https://www.cnblogs.com/mfryf...
https://www.cnblogs.com/wang_...测试

相关文章
相关标签/搜索