Makefile工程管理器
已有Addressbook.c main.c Addressbook.h 文件
建立vim Makefile 文件 //M要大写
写Makefile具体内容
在终端是输入make //相当于在终端输入gcc Addressbook.c main.c
Makefile 文件相当于经历了 预处理、编译、汇编、链接这四个过程
每次在终端输入make ,只编译改动过的文件,如果未改动,在终端输入make 时会显示最新的,然后输入./a.out即可
//编译过程
1.预处理 (宏替换)
命令 gcc -E hello.c -o hello.i //一般用i,换成j也行
生成的hello.i 文件中 包括了 头文件#include <stdio.h>的内容
如果hello.c 中包括了#define PI 3.1415 ,那么生成的hello.i文件中的PI 都被替换为 3.1415
2.编译(生成汇编文件)
gcc -s hello.c -o hello.s
3.汇编(二进制文件)
gcc -c hello.c -o hello.o
4.链接
gcc hello.c
在.c文件中用到的函数例如printf()函数,要去函数库中找到匹配函数,生成可执行文件
//从下往上
Addressbook: main.o Addressb
ook.o
gcc main.o Addressbook.o -o Addressbook //连接
main.o : main.c AddressBook.h
gcc -c main.c -o main.o
Addressbook.o : AddressBook.c AddressBook.h
gcc -c AddressBook.c -o AddressBook.o
.PYONE: clean
clean:
rm -rf *.o //删除所有.o文件
1. .PYONE: clean
clean:
rm -rf *.o
这三句加上可以删除所有.o文件
具体实现: 在终端上输入make clean // make代表首先要找到是否有Makefile这个文件
2. Addressbook.o : AddressBook.c AddressBook.h
Addressbook.o是目标文件,AddressBook.c AddressBook.h 是源文件
3.Makefile 可以包含多个.c /.h文件,每个.c 以及这个.c文件里所包含的.h头文件都要写成源文件,然后生成目标文件 (如果该文件用到了数据库以及线程,则后面加上-lpthread -sqlite3)
例如Addressbook.o : AddressBook.c AddressBook.h -lpthread -sqlite3
4. ./Addressbook 类似于./a.out
5.gcc / rm -rf *.o前添的是tab键(不是空格)
6. //给Makefile 文件 换名字
mv +Makefile+ newname //mv 剪切
make -f + newname 例如 make -f makefile1 //makefile1 文件替换了 Makefile文件
make -f makefile1 clean //是makefile1 文件的make clean命令
7带变量的Makefile
obj: main.o Addressbook.o
Addressbook:$(obj)
//带有变量可少写.o文件,使书写简洁
gcc $(obj) -o Addressbook
main.o : main.c AddressBook.h
gcc -c main.c -o main.o
Addressbook.o : AddressBook.c AddressBook.h
gcc -c AddressBook.c -o AddressBook.o
.PYONE: clean
clean:
rm -rf *.o //删除所有.o文件