Make编译学习笔记(一)Makefile基础
来源:互联网 发布:美国ela数据 编辑:程序博客网 时间:2024/05/22 18:16
在工程中通常有许多源文件并按类型放在若干个子目录中,Makefile 可以定义一系列的编译规则,写好后只需要一个 make 命令就可以对整个工程自动编译了。Makefile 文件能按一下规则进行编译
- 如果整个工程没编译,那么所有的源文件都要编译并链接。
- 如果修改了部分源文件 ,那么只编译链接修改的文件。
- 如果改变了引用的头文件,那么只编译链接引用头文件的文件
Makefile文件通常和源文件放在同一个目录下,文件名一般为 Makefile,Makefile 文件又若干规则组成,来个例子:
CC = gccmain: main.o insert.o search.o $(CC) -o main main.o insert.o search.omain.o: main.c $(CC) -c main.cinsert.o: insert.c $(CC) -c insert.csearch.o: search.c $(CC) -c search.cclean: rm *.o rm main
Makefile 文件中主要包含5个内容:显示规则、隐含规则、变量定义、文件指示和注释
CC = gcc
是声明变量 $(CC)
是使用变量
使用时在变量前加上 $,通常再用 ( ) 或 { } 把变量扩起来,如果使用真实的 $,用 $$ 表示。
Makefile 中的变量和 C 语言中的宏特别类似,代表了一个字符串,执行时在使用的地方原模原样的展开,与 C 语言中不同的是 Makefile 中的变量能改变值。变量的命名规则同 C 语言。
main: main.o insert.o search.o $(CC) -o main main.o insert.o search.o
这是条显示规则,表示如果条件更新了目标会执行一次命令进行更新。 main
是目标 main.o insert.o search.o
是条件 $(CC) -o main main.o insert.o search.o
是命令,命令必须以Tab开头,make会以UNIX的标准Shell来执行命令
Makefile 中约定了一些使用频率非常高的东西作为隐含规则,上面的 Makefile 文件如果用了隐含规则就变成了这样
CC = gccmain: main.o insert.o search.o $(CC) -o main main.o insert.o search.oclean: rm *.o rm main
可以看出 Makefile 中的隐含规则会自动进行推导,把 .o 的后缀替换成 .c,所以
main.o: main.c $(CC) -c main.cinsert.o: insert.c $(CC) -c insert.csearch.o: search.c $(CC) -c search.c
这几条规则就没必要写了。
默认的后缀列表是:.out , .a , .ln , .o , .c , .cc , .C , .p , .f , .F , .r , .y , .l , .s , .S , .mod , .sys , .def , .h , .info , .dvi , .tex , .texinfo , .texi , .txinfo , .w , .ch , .web , .sh , .elc , .el
- Make编译学习笔记(一)Makefile基础
- Make编译学习笔记(二)Makefile中的变量
- Make编译学习笔记(三)Makefile基本规则
- make学习笔记(一)
- make学习笔记(一)
- make及Makefile学习笔记
- Makefile 学习笔记(一) Makefile简介
- make 学习笔记一
- APM_PX4学习笔记(1):Make 编译
- Makefile学习笔记(一)
- Makefile学习笔记(一)
- Makefile学习笔记(一)
- Makefile学习笔记(一)
- GNU Make 学习笔记(一)
- GNU make 学习笔记(一)
- MakeFile学习笔记一
- Makefile学习笔记(一)
- linux驱动学习(一) Makefile基础
- u-boot下的内存操作命令mw与md
- HTML5 本地存储
- Ehcache整合spring配置
- 华为机试题 查询
- iOS 9: UIStackView
- Make编译学习笔记(一)Makefile基础
- Android 6.0 运行时权限管理最佳实践
- 5.1.1 读取Redis 数据
- objective-c 正则表达式 -NSRegularExpression 提取匹配内容
- 电脑行业的变革
- Exception in thread "main" java.lang.NumberFormatException: For input string: "2016/09/12 09:41:48"
- 有趣的圣诞树
- 教师资格证
- 数据库管理工具设置数据同步的方法