makefile 总结

一个Makefile中通常包含以下内容:
需要创建的目标体 target ,通常为目标文件或可执行文件
创建目标所以来的文件 dependency_file
创建目标时运行的命令 command
格式为:
target : dependency_file
         command
注意,在command之前必须有一个 tab 符

hello.o : hello.c hello.h
      gcc -c hello.c -o hello.o


1.在Makefile中可以使用变量替代常用的字符串,这个字符串可以是目标体,依赖文件,命令或者Makefile中的其他部分

   变量定义: VAR=var     递归展开,即如果var中包含其他变量,则也将其展开
               VAR:=var   简单展开,即只展开一次,不管var为何内容
   变量使用: $(VAR)

2.Makefile中常见的预定义变量
AR        库文件维护程序的名称
AS        汇编程序的名称
CC        C编译器的名称,
CPP       C预编译器的名称, $(CC) -E
CXX       C++编译器的名称

ASFLAGS    相对应的选项
CFLAGS
CPPFLAGS
CXXFLAGS


2.Makefile中常见的自动变量如下,他们都具有本地含义,即只在自己所属的结构体中有效

   $* 不包含扩展名的目标文件名称
   $@ 目标文件的完整名称
   $+ 所有的依赖文件,有可能重复,以空格分割
   $^ 所有不重复的依赖文件,以空格分割
   $< 第一个依赖的文件
   $? 所以时间戳比目标文件晚的依赖文件

3.Makefile规则
   
Makefile有自己的隐式规则
即所有的 .o 文件都可以由 同名 的 .c 或 .cc 文件生成
$(CC) -c $(CPPFLAGS) file.c -o file.o

Makefile也允许自定义规则,但是相关文件前必须加上 %

4.Make命令的使用

如果不加参数,则make默认读入当前文件夹下的Makefile,并建立其中的第一个目标

make -C dir   读入指定目录dir下的Makefile

make -f file 读入当前目录下的file文件作为Makefile

写了一个文件夹比较多的程序,在写主Makefile的时候,需要进入子文件夹执行make,在这里记录下,自己运行成功的Makefile。

[cpp]  view plain copy
  1. SUBDIRS=directory1 directory2 directory3  
  2. RECURSIVE_MAKE= @for subdir in $(SUBDIRS); \  
  3.         do \  
  4.         echo "making in $subdir"; \  
  5.         ( cd $subdir && $(MAKE) all -f Makefile -e CC='${CC}' CFLAG='${CFLAG}') || exit 1; \  
  6.         done  
  7.   
  8. RECURSIVE_CLEAN= @for subdir in $(SUBDIRS); \  
  9.         do \  
  10.         echo "cleaning in $subdir"; \  
  11.         ( cd $subdir && $(MAKE) clean -f Makefile) || exit 1; \  
  12.         done  
  13.   
  14. subdirs:  
  15.         $(RECURSIVE_MAKE)  
  16.   
  17. all: subdirs  
  18.   
  19. dclean:  
  20.         $(RECURSIVE_CLEAN)  

make是可以带参数的,我这里写的是子文件夹里的Makefile的变量CC和CFLAG都用我这个主Makefile里的设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值