一、 makefile
在多文件中使用
1.创建文件
代码语言:javascript复制先创建三个文件
test.h
mytest.c
main.c
文件
[yzq@VM-8-8-centos mk]$ touch test.h mytets.c main.c
[yzq@VM-8-8-centos mk]$ ls
main.c mytets.c test.h
2. test.h ——函数的定义
代码语言:javascript复制使用
vim test.h
进入vim编辑器 这里要使用条件编译,`#ifndef TEST #define TEST #endif 如果TEST 未被定义,则进入,#deifne定义 TEST endif 结束 这样做是为了防止头文件被包含
#ifndef TEST
#define TEST
#include<stdio.h>
void show();
#endif
定义函数show和c语言库
3. mytest.c——函数的实现
代码语言:javascript复制#include"test.h"
void show()
{
int i=0;
for(i=;i<=10;i )
{
printf("hello worldn");
}
}
这里需要注意的是,我们引用的头文件是 test.h ,因为是自己创建的头文件,所以要用" "
4. main.c——函数的调用
代码语言:javascript复制#include"test.h"
int main()
{
show();
return 0;
}
这里只需调用show函数即可
5. 正常生成
代码语言:javascript复制[yzq@VM-8-8-centos mk]$ ls
main.c mytest.c mytets.c test.h
[yzq@VM-8-8-centos mk]$ gcc mytest.c main.c -o test
[yzq@VM-8-8-centos mk]$ ls
main.c mytest.c mytets.c test test.h
[yzq@VM-8-8-centos mk]$ ./test
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
正常生成是利用
gcc mytest.c main.c -o test
生成一个可执行程序 test./ test
产生 hello world
6. makefile的使用
代码语言:javascript复制首先使用
vim makefile
(这里若是没有创建,则会自动创建一个文件)进入vim编辑器
test: mytest.c main.c
gcc $^ -o $@
.PHONY:clean
clean: rm -f test
代码语言:javascript复制输入
ESC :wq
,退出 vim 编辑器
[yzq@VM-8-8-centos mk]$ make
gcc mytest.c main.c -o test
[yzq@VM-8-8-centos mk]$ ./test
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
[yzq@VM-8-8-centos mk]$ make clean
rm -f test
输入
make
会自动生成gcc mytest.c main.c -o test
,并使用./test
输入make clean
会自动生成rm -f test
,可以自动删除目标文件test
1. 解析
test : mytest .c main.c
test 作为目标文件 ,冒号后的mytest.c 与main.c是依赖文件,这句话整体作为一个依赖关系gcc ^ -o @ ^ 代表目标文件@代表 依赖文件 等价于 gcc mytest.c main.c -o test 这句话整体作为一个依赖方法 特别注意:在gcc 前面加上 TAB
.PHONY:clean
clean: rm -f test.PHONY可以看作是makefile的关键字
clean ——伪目标
clean则是作为 伪目标存在
伪目标特点
代码语言:javascript复制伪目标特点:总是被执行
[yzq@VM-8-8-centos mk]$ make
gcc mytest.c main.c -o test
[yzq@VM-8-8-centos mk]$ make
make: `test' is up to date.
[yzq@VM-8-8-centos mk]$ make
make: `test' is up to date.
代码语言:javascript复制当多次使用make时,发现只有第一次可以运行,其他就会报错
[yzq@VM-8-8-centos mk]$ make clean
rm -f test
[yzq@VM-8-8-centos mk]$ make clean
rm -f test
[yzq@VM-8-8-centos mk]$ make clean
rm -f test
[yzq@VM-8-8-centos mk]$ make clean
rm -f test
当多次使用 make clean时,发现可以都可以正常运行。
使用 make clean 的原因
makefile是一个脚本,默认识别是从上往下,只会执行一个可执行,所以想要跳过项目的创建,就要加上对应的名字