2.初识makefile的结构
makefile的意义
1)makefile用于定义源文件间的依赖关系
2)makefile说明如何编译各个源文件并生成可执行文件
1)makefile用于定义源文件间的依赖关系
2)makefile说明如何编译各个源文件并生成可执行文件
依赖的定义:
targets:prerequisites;command1 依赖可以省略
'\t'command2
targets:prerequisites;command1 依赖可以省略
'\t'command2
makefile中的元素含义
1)targets
通常是需要生成的目标文件名
make所需执行的命令名称
2)prerequisities
当前目标所以依赖的其它目标或文件
3)command
完成目标所需要执行的命令
1)targets
通常是需要生成的目标文件名
make所需执行的命令名称
2)prerequisities
当前目标所以依赖的其它目标或文件
3)command
完成目标所需要执行的命令
规则中的注意事项
1)targets可以包含多个目标
使用空格对多个目标名进行分割
2)prerequisities可以包含多个依赖
使用空格对多个依赖进行分隔
3)[tab]键:'\t'
每一个命令行必须以[Tab]字符开始
[Tab]字符告诉make此行是一个命令行
4)续行符:\
可以将内容分开写到下一行,提高可读性
1)targets可以包含多个目标
使用空格对多个目标名进行分割
2)prerequisities可以包含多个依赖
使用空格对多个依赖进行分隔
3)[tab]键:'\t'
每一个命令行必须以[Tab]字符开始
[Tab]字符告诉make此行是一个命令行
4)续行符:\
可以将内容分开写到下一行,提高可读性
依赖规则
1)当目标对应的文件不存在,执行对应命令
2)当依赖在时间上比目标更新,执行对应命令
3)当依赖关系连续发生时,对比依赖链上的每一个目标
1)当目标对应的文件不存在,执行对应命令
2)当依赖在时间上比目标更新,执行对应命令
3)当依赖关系连续发生时,对比依赖链上的每一个目标
小技巧
makefile中可以在命令前加上@符,作用为命令无回显。(命令本身不打印)
makefile中可以在命令前加上@符,作用为命令无回显。(命令本身不打印)
实验:
makefile
all:test
@echo ''make all''
test:
@echo ''make test''
makefile
all:test
@echo ''make all''
test:
@echo ''make test''
执行make/make test
第二讲:
第一个make的编译案例
hello.out:main.o func.o
gcc -o hello.out main.o func.o
main.o:main.c
gcc -o main.o main.c
func.o:func.c
gcc -o func.o func.c
通过源文件来依赖于makefile源文件,了解开源代码相互之间关系
第一个make的编译案例
hello.out:main.o func.o
gcc -o hello.out main.o func.o
main.o:main.c
gcc -o main.o main.c
func.o:func.c
gcc -o func.o func.c
通过源文件来依赖于makefile源文件,了解开源代码相互之间关系
小技巧:
工程开发中可以将最终可执行文件名和all同时作为makefile中第一条规则的目标。
hello.out all:main.o func.o
gcc -o hello.out main.o func.o
工程开发中可以将最终可执行文件名和all同时作为makefile中第一条规则的目标。
hello.out all:main.o func.o
gcc -o hello.out main.o func.o
应用:
hello.out all :main.o func.o
gcc -o hello.out main.o func.o
main.o:main.c
gcc -o main.o main.c
func.o:func.c
gcc -o func.o func.c
hello.out all :main.o func.o
gcc -o hello.out main.o func.o
main.o:main.c
gcc -o main.o main.c
func.o:func.c
gcc -o func.o func.c
func.c
#include 'stdio.h'
#include 'stdio.h'
void foo()
{
printf("void foo():hello makefile\n");
}
{
printf("void foo():hello makefile\n");
}
main.c
extern void foo();
int main()
{
foo();
return 0;
}
extern void foo();
int main()
{
foo();
return 0;
}
可以用来编译java