zoukankan      html  css  js  c++  java
  • Makefile 待完善

    Makefile文件

      在编译程序的时候,通常需要用到多个文件,当工程很大时,编译一个一个程序太过浪费时间。当使用Makefile文件的只需要执行make命令便可以将整个工程一次性编译下来,

    还可以根据自己的需求编译出需要的文件,这些都可以通过编写Makefile文件实现。

    ##########定义变量##############################
    #CC=arm-linux-gcc #可修改成自己需要的编译器,不设置则是默认的编译器 TAG=./BIN/main #定义目标文件的目录 SRC=$(wildcard ./SRC/*.c) #将./SRC目录下的所有.c文件作为SRC变量的列表 OBJ=$(SRC:%.c=%.o) #将./SRC变量列表的.c改成.o
    objs = xx.o xx/xx.o #这里需要注意.o文件的链接顺序,不然会有未定义与重定义的错误出现 override CONFIG += -I./INC #用于添加头文件目录或者是库文件目录,需要添加别的选项可以make CONFIG="-L",CONFIG便会临时加上这一选项
                     #注意override和+号必不可少 ###############################################
    ##变量的引用使用$()
    #目标 依赖 $(TAG):$(SRC) $(CC) $^ -o $@ $(CONFIG) #$^:表示全部依赖文件 $@:表示目标文件

    $(SRC):$(OBJ)
      $(CC) $^ -o $@ -c $(objs) #生成.o文件

    #目标 clean: $(RM) $(OBJ) $(TAG) #强调不要引用任何隐式规则,就是当工作路径有一个文件叫clean时,make clean不会与其发生冲突 .PHONE:clean

    注意:

    1.以上代码是Makefile编译程序的一般代码,Makefile太过庞大,系统学习下来要花不少时间,目前只需要用到什么用什么就可以了;

    2.当执行命令make时,不添加目标则第一个将成为这当个Makefile的最终目标;

    3.如果目标已经存在,则需要比较目标和依赖的时间关系,如果依赖不存,则不需要比较会导致不执行。如果依赖存在则比较目标新则需要更新,反之则不需要更新。

    4.在makefile的眼中,所有的文件都有是一层一层递推的目标-依赖关系,然后通过对比目标和依赖的更新时间来决定下一步动作。当目标无法生成时,会通过依赖层层递推,

    然后层层返回,生成最终的目标。

    目前Makefile学到了这里,在系统移植的时候会大量接触,到时候再添加。

  • 相关阅读:
    iOS中的隐式动画
    CALayer 为什么选择 cg 开头 而 不选择 UI 开头
    webStorm中的混乱代码格式化
    html5中的常用的库
    地下城勇士外挂
    开发板的时间设置有效,但重启恢复
    8148
    监控行人检测 .
    Linux设备驱动程序学习之分配内存
    快熟傅里叶算法图之音频wav文件
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14087687.html
Copyright © 2011-2022 走看看