对makefile的一点理解
来源:互联网 发布:小米自带的网络助手 编辑:程序博客网 时间:2024/05/03 12:13
1. makefile工作流程是:
A. 取第一个目标
B. 根据依赖关系逐层建立依赖树
C. 反向根据依赖关系,运行用户定义的cmd
2. 模式匹配:
不是非常清楚 %和*有什么区别,做了两个实验
实验1:
TT: test.o test2.o test_main.o
gcc -o $@ $^
%.d:%.c
echo test
输出 两个test
实验2:
TT: test.o test2.o test_main.o
gcc -o $@ $^
*.d:*.c
echo test
输出3个test
感觉*是把当前目录下所有文件都会试验一次(每次取一个),而%是把相关文件(如何相关?)逐个取出
3. 对于自动生成依赖的理解
include $(OBJS:.o=.d) 行1
%.d:%.c 行2
@set -e; rm -f $@; / 行3
$(CXX) -MM $(CXXFLAGS) $< > $@.$$$$; / 行4
sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' < $@.$$$$ > $@; / 行5
rm -f $@.$$$$
我们的目标就是生成类似
.o: .c .h的关系(借助于GCC自动产生文件依赖)。之所以会有上面这么复杂的过程。
A. 首先我们想到如何生成依赖--->行4
B. 如何为所有文件生成呢? ---->行2 每次取其中一个
C. 如何把它加入进来--->行1
D. 如何让其可以每次都自己更新呢,就得让它与源文件产生关系--->行3
个人认为.d的生成是因为include 此.d时找不到,触发了行2(因为在没有.d时,.d其实和依赖树没有产生任何关系,而且即使后来有.d后,也没有直接关系。所以按理不会执行到行2。有点饶口)。
结论:include可能是把.d加入到依赖树的根结点处
4. 关于sed的用法:http://wenku.baidu.com/view/1da0da1755270722192ef7a3.html
- 对makefile的一点理解
- 对makefile的理解
- 对ActiveX的一点理解
- 对inherited的一点理解
- 对管理信息系统的一点理解
- 对主力的一点理解
- 对HANDLE_MSG()的一点理解
- 对__threadfence的一点理解
- 对ibatis的一点理解
- 对中断的一点理解
- 对Zigbee的一点理解
- 对AndroidRuntime的一点理解
- 对HANDLE_MSG()的一点理解
- 对软件工程的一点理解
- 对.Class的一点理解
- 对static的一点理解
- 对Struts2的一点理解
- 对AJAX的一点理解
- 音乐自动播放且不断循环
- Qt中的信号和槽之connect----多线程调用全解析(同步/异步)
- 听的艺术
- Sunjava认证内容和认知度
- 转载 [Joe 原创] 对 Web Control
- 对makefile的一点理解
- Qt中的事件提交
- Qt中的线程支持
- POJ 2503 字符串查找 qsort+二分查找
- XP Java 环境变量配置
- 123
- Hibernate连接池配置
- android ui 之 Styles 和 Theme
- 关于Qt-QGridLayout布局的简单使用