现在有mysum.h、mysum.c和ex_sum.c三个文件编写一个makefile文件如下:
1 sum:ex_sum.o mysum.o 2 gcc ex_sum.o mysum.o -o sum //开头一个Tab键的制表符号位 3 ex_sum.o:ex_sum.c 4 gcc -c ex_sum.c 5 mysum.o: mysum.c mysum.h 6 gcc -c mysum.c
然后执行make命令生成可执行文件。
makefile包含内容
- 需要由make工具创建的目标体(target),通常是目标文件或可执行文件。
- 要创建的目标体所依赖的文件(dependency_file)。
- 创建每个目标体时需要运行的命令(command)。
makefile的格式:
target:dependency_files
command
command前必须要有Tab制表符!
处理上面简单的例子可以直接使用编译命令就可以了,如果是复杂的程序呢?
如果一个程序涉及:mytool1.h mytool2.h mytool1.c mytool2.c main.c
可以直接编译:
1 gcc -c main.c 2 gcc -c mytool1.c 3 gcc -c mytool2.c 4 gcc -o main main.c mytool1.o mytool2.o
但是如果修改了mytool1.c,就要重新输入上面的命令。
那么编写makefile文件:
1 main:main.o mytool1.o mytool2.o 2 gcc -o main main.o mytool1.o mytool2.o 3 main.o:main.c 4 gcc -c main.c 5 mytool1.o:mytool1.c mytool1.h 6 gcc -c mytool1.c 7 mytool2.o:mytool2.c mytool2.h 8 gcc -c mytool2.c
所以此时的Make工程管理器(自动编译管理器)就凸显其重要性了。
- “自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量。
- 用户只需输入一次编译语句就行了,它直接读入makefile文件的内容来执行编译工作。
makefile写好之后执行make命令,然后./main运行文件。
以下是make工作流程:
- 当更改部分程序代码后,只需再次执行make命令,此时make会自定检查相关文件的时间戳。
- 在检查.o文件之前会向下检查那些把.o文件作为目标文件的时间戳。
- 如果这些文件中任意一个时间戳比它们新,则用gcc,命令将此文件重新编译。