========================================================
这里记录makefile相关知识和一些具体的实例
========================================================
一、入门(了解理论)
1.1为什么存在makefile?
Makefile 用于帮助决定大型程序的哪些部分需要重新编译。 在绝大多数情况下,编译 C 或 C++ 文件。 其他语言通常有自己的工具,其目的与 Make 类似。 当您需要根据更改的文件运行一系列指令时,Make 也可以在编译之外使用。 本教程将重点关注 C/C++ 编译用例。
下面是您可以使用 Make 构建的示例依赖关系图。 如果任何文件的依赖关系发生变化,那么该文件将被重新编译:
-------------------------------------------------------------------------------------------------------------------------
生成makefile需要的文件示例&&.h文件的写法
-------------------------------------------------------------------------------------------------------------------------
- .c文件是源文件
- .h文件是头文件
1.2简单示例1(打印hello world)
- 在工程目录中建一个makefile文件
- 终端在该目录下执行make生成.o文件
注意:一定要制表符缩进,不要空格!!(所有空格键都用tab键代替)
1.3简单示例2(make的所有步骤和简化过程)
- 编写源代码和所有需要的依赖文件(.c、.h)
- 编写makefile文件(比较繁琐的写法)
- 简化makefile V1
- 简化makefile V2
- 简化makefile V3
-------------------------------------------------------------------
1.3.1编写源代码
-------------------------------------------------------------------
-------------------------------------------------------------------
1.3.2 编写makefile
-------------------------------------------------------------------
-------------------------------------------------------------------
1.3.3 添加clean语句
-------------------------------------------------------------------
执行完make clean删除掉所有的.o文件和可执行文件
-------------------------------------------------------------------
1.3.4 简化makefile V2
-------------------------------------------------------------------
- OBJS 代替 依赖文件(.o文件)
- CC 代替 gcc
- CFLAGS 代替编译命令
-------------------------------------------------------------------
1.3.5 简化makefile V3
-------------------------------------------------------------------
- $^ 代替 上面指令(main.o:main.c这里指的是main.c这个文件)
- RM 代替 rm -f
- $@ 代替 目标文件(gcc main.c -o main.o $(CC) $^ $(CFLAGS) -o $@)
-------------------------------------------------------------------
1.3.6 简化makefile V4
-------------------------------------------------------------------
- %作为一个通配符 %.o:%.c (即代替所有的.o文件和所有的.c文件)
- $(TARGET) 代替 可执行文件(mytool)
======================================================
makefile简化过程
======================================================
V1 | |
---|---|
V2 | |
V3 | |
V4 |
参考链接: