继续学习makefile,希望尽快掌握makefile好在面试中更好的掌握方向!加qq1126137994一起学习更多技术!!
1、回顾
makefile的意义:
- makefile用于定义源文件之间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
依赖的定义:
‘\t’ 代表的是tab键!
makefile中各元素的意义:
-targets:
- 通常是需要生成的目标文件名
- make所需执行的命令名称
-prerequisities:
- 当前目标所依赖的其他目标或依赖
-command:
- 完成目标所需执行的命令
注意事项:
- targets可以是多个目标,使用空格对目标名进行分离
- prerequisities可以是多个依赖,使用空格对多个依赖进行分隔
- 每一个命令行,都必须以一个【tab键】字符开始,【tab】字符告诉make这一行是命令行
- 续行符【\】,可以将内容分开写到下一行,提高可读性
一个makefile的依赖示例:
依赖规则:
- 当目标对应的文件不存在,执行对应的命令
- 当依赖在时间上比目标更新,执行相应的命令(意思就是依赖文件有改动时,执行相应命令)
- 当依赖关系连续发生时,对比依赖链上的每一个目标
小技巧:
makefile中可以在命令前加上【@】符,作用为命令无回显!
2、makefile简单示例
下面是一个简单的makefile文件:
all : test
@echo "make all"
test :
@echo "make test"
输入:make命令,显示如下:
make test
make all
3、make编译简单示例
小技巧:
工程开发中,可以将最终可执行的目标文件名 和 all 同时作为makefile中的第一条规则的目标
hello.out all : main.o func.o
gcc -o hello.out main.o func.o
下面给出一个:
makefile文件:
hello.out all : func.o main.o
gcc -o hello.out func.o main.o
func.o : func.c
gcc -o func.o -c func.c
main.o : main.c
gcc -o main.o -c main.c
func.c文件:
#include "stdio.h"
void foo()
{
printf("void foo() : hello makefile\n");
}
main.c文件:
extern void foo();
int main()
{
foo();
return 0;
}
在Linux下输入make命令执行,结果如下:
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o
运行编译所得的可执行文件:hello.out
输出结果为:
void foo() : hello makefile
以上程序比较简单,就不分析了,仅供学习复习使用!!!
4、总结
- makefile用于定义源文件之间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
- makefile中的目标之间存在连续依赖的关系
- 依赖存在并且命令执行成功是目标完成的充要条件
想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。
本学习记录完全来源于狄泰软件学院的相关课程,可以加我q:1126137994或者Q群:199546072 ,给你推荐更多学习课程。