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学到了这里,在系统移植的时候会大量接触,到时候再添加。

 

posted @ 2020-12-04 20:36  ding-ding-light  阅读(68)  评论(0编辑  收藏  举报