Makefile 笔记

001_Makefile引入
  gcc -o main main.c sub.c

Makefile的核心---规则:
目标 : 依赖1 依赖2 ...
[TAB]命令

main.0:main.c

  gcc -c -o mian.o main.c

当“目标文件”不存在,或者某个依赖文件比目标文件“新”,就执行“命令”

002_基本语法
  % 通配符
  $@ 目标文件
  $< 第一个依赖文件
  $^ 所有依赖文件

PHONY 定义假想目标,make时可以带目标,如果目标和makefile中的函数重名就会将函数名错误地解读为目标
.PHONY: foo
foo:
  rm *.o

003_变量
:= 即时变量,定义的时候就被确定
= 延时变量,值在使用到是才确定
?= 延时变量,如果是第一次定义才起效,如果在前面该变量已经定义则忽略此定义
+= 附加,它是即时变量还是延时变量取决于前面的定义

004_Makefile函数
$(foreach var,list,text)
$(filter pattern...,text) //从text中取出匹配pattern之一的文本
$(filter-out pattern...,text) //从text中过滤掉匹配pattern之一的文本
$(wildcard pattern...) //pattern定义了文件名的格式,wilward将取出其中存在的文件
$(patsubst pattern,replacement,text) //从列表中取出每一个值,如果符合pattern,则替换为replacement

005_makefile支持头文件
gcc -M c.c //打印依赖文件
gcc -M -MF c.d c.c //把依赖文件写入文件c.d
gcc -c -o c.o c.c -MD -MF c.d //编译生成c.o,并把依赖文件写入c.d

006_添加CFLAGS
添加编译选项
-I $(shell pwd)/include //指定要包含的头文件的路径为当前目录下的 include 文件夹
-i //指定要包含的头文件,一般使用,而是在源文件中包含s
-L //指定要包含的库文件的路径
-l //指定要包含的库文件
-D //定义宏

posted @ 2022-07-28 21:42  Ivan0512  阅读(24)  评论(0编辑  收藏  举报