2.初识makefile的结构

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

猜你喜欢

转载自www.cnblogs.com/ou-yang/p/12651564.html