【Linux学习】Makefile学习(二)
来源:互联网 发布:centos 编译php5.6.32 编辑:程序博客网 时间:2024/05/21 11:07
如果没有像windows下面的IDE,要想编译一个工程文件,需要怎样实现呢?例如:把windows下面的工程文件放到Linux下面,该怎样让它运行呢?下面我们先来了解两个概念:编译、链接。
当我们习惯了在windows下编程,我们写完程序后,只要点击一下按钮就可以执行,产生了可执行的文件。我们就会相当然的认为是这样:只要我们正确的写出程序然后点击按钮就可以了。其实,windows下的IDE为我们隐去了“编译”,“链接”。无论是C还是C++,首先要把源文件编译成中间代码文件,在Linux下就是“.o”后缀的文件,这个动作叫做编译。而链接就是把这些中间代码文件合成可执行文件。
Linux中,运行工程文件时,会用Makefile来完成编译连接的功能从而生成可执行文件。当我们将Makefile写好,然后运行make后,就会生成可执行文件。在Makefile中会定义一系列的规定,指定哪些文件先编译,哪些文件后编译等一系列的操作。假如在一个工程文件中,写好了正确的Makefile,感到好奇的是:为什么执行make后就会出现可执行文件,Make的工作原理是什么?
其实,当我们输入make后,make首先在当前目录下找到Makefile或者makefile文件,找到makefie后,会找到文件中的第一个目标文件ABC_1(自己假设的),并且会把此文件作为最终的目标文件。如果ABC_1不存在或者ABC_1后面依赖的ABC_2.o文件的修改时间要比ABC_1新,那么就会执行后面所定义的命令来生成ABC_1。但,如果ABC_1所依赖的ABC_2.o文件也不存在,那么make就会在此目录下找生成ABC_2.o所依赖的文件ABC_3.o,再根据生成规则生成ABC_2.o,就这样想一种递归的方式来寻找文件的依赖关系,直到找到最开始生成的目标文件。
下面是学习Makefile时写的两个程序:
源程序文件1:
Makefile文件:
运行的结果:
第一个程序的源文件就是一个简单的printf()函数,makefile中的hello就是最终要生成的目标文件,冒号后面是hello要依赖的文件,再后面就是生成hello所需要的命令。后面的"clean",和第一个目标文件没有联系,那么它定义的命令就不会自动的执行。因此,当要清除程序执行过程中产生的文件时就输入:make clean
源程序文件2:
Makefile文件:
运行的结果:
第二个程序中,有两个源文件,makefile中的Helloworld是最终要生成的目标文件,然后make会找到Helloworld的依赖文件main.o,此时main.o并不存在,make会继续寻找生成main.o的规则,生成main.o,然后make会找到Helloworld的依赖文件a.o,a.o也不存在,然后make找到生成a.o的规则,生成a.o,并最终生成了Helloworld
- Linux Makefile学习(二)
- 【Linux学习】Makefile学习(二)
- linux驱动学习(二) Makefile高级
- linux驱动学习(二) Makefile高级
- linux驱动学习(二) Makefile高级
- Makefile学习(二)
- Makefile学习(二)
- Makefile学习(二)
- makefile学习(二)--Makefile 总述
- makefile学习笔记(二)
- Makefile 学习小记(二)
- Linux Makefile学习(一)
- Linux学习(十三):Makefile
- makefile学习之二
- Makefile学习(二)
- Makefile学习笔记(二)
- 【Linux学习】Makefile学习(一)
- Makefile学习之使用变量(二)
- IoC模式
- 变位字java实现
- 完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
- 正则表达式收集汇编
- HDU 1226超级密码(数位BFS)
- 【Linux学习】Makefile学习(二)
- 最大流的算法——Edmonds-Karp算法(最短路径增广算法)
- mysql5.6登陆时,1045:Access denied for user 'root'@'localhost'
- 美好的一天
- ssh基础知识
- lua的Debug库
- bash下如何使用bind[En]
- 第三篇——第二部分——第一文 SQL Server镜像简介
- 广州多益网络2014实习机试题目