初识makefile的结构
来源:互联网 发布:韩国网络剧推荐 编辑:程序博客网 时间:2024/06/05 07:01
1 makefile的意义
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行文件
2 依赖的定义
makefile中元素的含义
- targets
- 通常是需要生成的目标文件名
- make所需执行的命令名称
- prerequisites
- 当前目标所依赖的其它目标或文件
- command
- 完成目标所需要执行的命令
规则中的注意事项
- targets可以包含多个目标
- 使用空格对多个目标进行分隔
- prerequisites可以包含多个依赖
- 使用空格对多个依赖进行分隔
- [ Tab ]键:’\t’
- 每一个命令行必须以[ Tab ]字符开始
- [ Tab ]字符告诉make此行是一个命令行
- 续行符:\
- 可以将内容分开写到下一行,提高可读性
一个makefile的依赖示例
依赖规则
- 当目标对应的文件不存在,执行对应命令
- 当依赖在时间上比目标更新,执行对应命令
- 当依赖关系连续发生,对比依赖链上的每一个目标
小技巧
- makefile中可以在命令前加上@符,作用为命令无回显
编程实验:makefile的规则依赖
all : test @echo "make all"test : @echo "make test"
3 第一个make的编译案例
小技巧
- 工程开发中可以将最终可执行文件名和all同时作为makefile中第一条规则
- all主要用来强制执行相关命令
hello.out all : main.o func.o gcc -o hello.out main.o func.o
编程实验:初探make编译
func.c:#include "stdio.h"void foo(){ printf("void foo() : hello makefile\n");}main.c:extern void foo();int main(){ foo(); return 0;} makefile:hello.out all : func.o main.o gcc -o hello.out func.o main.ofunc.o : func.c gcc -o func.o -c func.cmain.o : main.c gcc -o main.o -c main.c
编程实验:make用于编译java程序
HelloJava.java:public class HelloJava { public static void main(String[] args) { System.out.println("Hello Java!"); }}makefile:HelloJava.class all: HelloJava.java @javac HelloJava.java @java HelloJava
4 小结
- makefile用于定义源文件间的依赖关系
- makefile说明如何编译各个源文件并生成可执行程序
- makefile的目标之间存在连续依赖关系
- 依赖存在并且命令执行成功目标完成的充要条件
修改记录
参考资料
唐老师 — 狄泰软件学院 — 十二月提升计划
阅读全文
0 0
- 初识makefile的结构
- 2-初识makefile的结构
- 初识HTML的结构
- 初识makefile
- 初识makefile
- 初识Makefile
- 初识makefile
- 初识makefile
- 初识Makefile
- 初识makefile
- 初识 Makefile
- 初识Makefile
- 初识Makefile
- 初识Makefile
- Makefile初识
- 初识Makefile
- makefile初识
- nmake inside: Makefile的结构
- java transient简介
- HM学习心得1
- Strategy策略设计模式(十八)
- java代理
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
- 初识makefile的结构
- 2017西安交大ACM小学期数据结构 [线段树]
- BZOJ-2733 永无乡 合并线段树 并查集
- JAVA 比较两个日期相差的天数
- 锁,同步,可重入锁,读写锁
- 2017.7.3 SPFA SLF优化
- vc++上传文件
- C++中#include<XXX.h>和#include"XXX.h"的区别
- 理解Rabbitmq消息通信