美文网首页
make-编译-链接那些事儿

make-编译-链接那些事儿

作者: 牛四哥 | 来源:发表于2015-06-10 23:16 被阅读0次

今天翻了下qt的qmake manual,就心血来潮地搜了些make的博客看看。

着重Makefile经典教程(掌握这些足够)
LIB和DLL的区别与使用这两篇博客,感觉写得很棒,将今天的收获归纳如下。

make

Qt的qmake会根据.pro文件自动生成Makefile。Makefile中定义了一系列规则,规定哪些文件需要先编译,哪些文件后编译,哪些文件需要重新编译,实现了自动编译的功能。

若是有了Makefile,那么就可以简单地使用

make makeDemo

命令,完成编译得到可执行文件的过程。当然也可以执行

make clean

清除,然后重新编译。

make过程

1.make首先会寻找Makefile。

2.在Makefile中寻找TARGET,并把这个TARGET作为最终的目标文件。

3.寻找TARGET的依赖项.o文件,再去找.o文件的依赖项....

4.相当于到了叶子节点,就找到.c和.h文件编译生成.o文件,...,最后生成可执行文件。

链接库

首先我们要清楚编译是将源代码编译成中间代码.o文件,再通过链接器将链接库中需要的代码与.o文件链接在一起,生成可执行文件。根据可执行文件中包含实际代码还是只是包含函数代码的入口地址,分为静态编译和动态编译两种。同样也有静态链接库和动态链接库两种。

静态链接库

LIB中包含了函数代码本身,在链接时直接将代码加入到可执行文件中,称为静态链接库。

动态链接库

LIB中包含了函数所在DLL文件和文件中函数位置的信息,代码有运行时加载在进程空间中的DLL提供,称为动态链接库。

静态链接

静态链接使用静态链接库,连接器从静态链接库中找到应用的函数代码,并将库同代码一起放入到可执行文件中。

动态链接

动态链接使用动态链接库,允许可执行文件只包含在运行时定位动态链接库DLL中所需函数的位置信息。

总结

将make过程和链接库结合在一起看:要是.c,.h被修改过那它的修改时间一定会比生成的可执行文件的时间要新,那么相关的依赖这些.c,.h文件的.o文件就需要重新编译,然后回溯到TARGET,最后根据动态编译还是静态编译,以不同的方式产生可执行文件。

相关文章

  • make-编译-链接那些事儿

    今天翻了下qt的qmake manual,就心血来潮地搜了些make的博客看看。 着重Makefile经典教程(掌...

  • 嵌入式(编译内核、根文件系统等)

    1.嵌入式系统的组成: 通过 make->linux make busybox make uls 编译通过,如果...

  • 线上链接那些事儿

    1. 如何链接别人?如何更有效地帮助别人? • 分析具体需求,寻求匹配资源 • 发出请求信息,获得认同 • 牵线双...

  • 还记得最初的自己吗?

    原文请点击链接: 记忆里的那些事儿

  • 编译那些事儿1-预编译

    同步博客:My Love 最近要深入了解一下计算机的内部结构了,准备看一下《深入理解计算机系统》这本书,这就当是自...

  • gcc_clang的使用_day93

    编译命令 编译流程 预编译 编译 链接, 动态链接/静态链接 编写文件 add.c clang -g -c ad...

  • 编译链接

    转自http://blog.csdn.net/navyhu/article/details/47023317理解链...

  • 【Linux】gcc/g++编译命令

    gcc 编译、链接 运行 g++ 编译、链接 运行

  • 编译链接过程

    编译链接过程 一个完整的编译链接过程包含了以下步骤: 预编译 编译 汇编 链接 预编译 预编译的处理规则如下 删除...

  • Android APK 编译打包流程

    今天就和大家一起去探索下Android中编译打包的那些事儿。整个构建流程大概分为两部分:编译(Compile),打...

网友评论

      本文标题:make-编译-链接那些事儿

      本文链接:https://www.haomeiwen.com/subject/lzjjqttx.html