makefile基础

编译和链接

  • 编译:编译时,编译器需要的是语法的正确,函数与变量的 声明的正确。
  • 链接:链接时,主要是链接函数和全局变量

makefile

基础格式

target : prerequisites
command
  • target:目标文件
  • prerequisites:依赖文件
  • command:生成规则
  • PS:make 会比较 targets 文件和 prerequisites 文件的修改日期,如果 prerequisites 文件的 日期要比 targets 文件的日期要新,或者 target 不存在的话,那么,make 就会执行后续定义的命令
  • 自动推导:只要 make 看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果 make 找到一个 whatever.o,那么 whatever.c,就会是 whatever.o 的依赖文件。并且 cc -c whatever.c 也会被推导出来。
  • 在 Makefile 中的command命令,必须要以[Tab]键开始。

clean的写法

.PHONY : clean clean :
-rm edit $(objects)
  • .PHONY 意思表示 clean 是一个“伪目标”
  • rm 命令前面加了一个小 减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。
  • clean 从来都是放在文件的最后

makefile构成

  1. 显示规则
    生成文件、依赖文件、生成命令
  2. 隐晦规则
    自动推导
  3. 变量的定义
    一般都是字符串
  4. 文件指示
    • 一个 Makefile 中引用另一个 Makefile
    • 根据某些情况指定 Makefile 中的有效部分
    • 定义一个多行的命令
  5. 注释

使用其他的makefile

  • 命名:Make.Linux
  • 调用:make -f Make.Linux 或 make --file Make.Linux

引用其他的makefile

引用方式

  • 可以直接include
  • 使用shell的 “* ” 遍历
  • include 变量
bar+=e.mk
bar+=f.mk
include foo.make *.mk $(bar)

等价于:

include foo.make a.mk b.mk c.mk e.mk f.mk

makefile 查找方式

  • 优先当前目录
  • 如果 make 执行时,有“-I”或“–include-dir”参数,那么 make 就会在这个参数所指定的目录下去寻找。
  • 如果目录/include(一般是:/usr/local/bin 或/usr/include)存在的话,make 也会去找。
  • 无论 include 过程中出现什么错误,都不要报错继续执行的方法:
-include <filename>

make 的工作方式

1、读入所有的 Makefile。
2、读入被 include 的其它 Makefile。
3、初始化文件中的变量。
4、推导隐晦规则,并分析所有规则。
5、为所有的目标文件创建依赖关系链。
6、根据依赖关系,决定哪些目标要重新生成。
7、执行生成命令。

添加define

EXTRA_CFLAGS += -D

警告编译不过

CFLAGS += $(INCLUDE) -O2 -Wall -muclibc -Werror
把-Werror删了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值