这应该算是我的第一篇博客,之前一直没有写博客的习惯。直到最近几天,看到一篇文章分析写博客对于程序员的技术提升的作用以及自己在这段时间的学习中总是不得其法的原因,故而下定决心,开始以博客的方式记录自己的点滴学习过程,同时也给自己一个反思的时间,用来将知识反复咀嚼,以达到正真意义上的掌握。
这一篇文章主要记述的是我这段时间在学习C++开源框剪Qt的过程中,碰到的一个最首要的问题——如何用VC编译器来自己编译Qt的源码呢?关于Qt的介绍,大家可以参考维基百科词条。(Qt词条)
由于自己平时在用VS写代码的时候,几乎从来没有在DOS下,自己手动编译过代码,所以一碰到要自己编译代码的东西就头大的很。然后时间久了之后发现,很多好的开源平台的技术的很多项目都是只提供源码的,也就是说剩下的从源码到二进制文件这中间所有的事情都应该是由我们自己来完成的。从这个角度来看,自己会用编译器编译源码而不是简单的在IDE中点一下编译是我们程序员走向更高的平台必须要过的一关,我们需要自己跳出舒适的环境,让自己痛苦起来,那样我们才能更好的成长。
源码的编译我个人将其分为以下几个阶段:
- 获取源代码
- 配置编译环境
- 配置编译条件
- 开始编译
先总的说一下各个阶段主要干的是些什么事情,获取源代码这应该不需要多说,毕竟这是“做饭”的食材,不能没有。其次配置编译环境,在这个阶段,我们需要确定使用什么编译器,系统变量是否设置好了。接着配置编译条件,就需要我们根据具体的情况生成相应的Makefile和其他想的文件了。最后开始编译阶段,几乎不需要我们在做多少事情了,简单的把这些事情交给编译器,只有出现问题了,我们在来解决也就可以了。在这里有一点需要提醒各位的是,我们在最后开始编译的阶段,并不是会一帆风顺的,反而会是一波三折,经常出现一些莫名其妙的问题,很是烦人。哈哈,这就需要大家有着很好的耐心了。
- 获取源码
获取源码主要有两种方式,一种是通过官网(QT)直接下载源码的打包文件,另外一种就是用git从Qt公司的Repository下载就可以了(地址是:code.qt.io)。第一种方式不在多说,这里主要说下通过git下载源码的方式,其实很简单,在windows下打开git bash或者在cmd窗口输入一行简单的命令就可以了。具体命令如下:
1 git clone git://code.qt.io/qt/qt5.git
执行该命令之后,git就会帮我们从code.qt.io服务器上下载qt5的源码,保存的位置是我们当前工作目录。
2.配置编译环境
配置编译环境的话主要就是设置下相关的系统环境变量。在这里设置环境变量有两个目的,第一、将VC的编译工具nmake添加到环境变量中以便在命令行中我们可以使用该工具;第二、保证后面编译Qt源码的时候会使用到的qmake工具可以正常使用。设置环境变量一般也有两种方式,第一种就是我们在系统环境设置界面通过GUI来操作完成,第二种就是我们自己写一个cmd或者bat脚本,将所有操作放在一起,然后在命令行中执行该脚本就可以了。同样第一种方式不多介绍,我们这里主要使用的是第二种方法,下面我将脚本的代码贴出来,大家可以自己了解,当让也可以保存为脚本直接运行。
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64 SET _ROOT=C:\user\administrator\qt5 SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% SET QMAKESPEC=win32-msvc2013 SET _ROOT=
3.配置编译条件
这个阶段也是很轻松,因为有负责人的程序员帮我们做了绝大部分的工作,所以我们只要完成剩下的那些很简单的东西就可以了。在这个阶段主要用到的工具是我们下载的源码中的configure或者configure.bat这两个文件中的。configure工具主要是设置一些编译的相关条件和生成Makefile文件。对于Qt的源码编译来说,我们需要输入的命令行如下:
configure -developer-build -opensource -confirm-license
4.开始编译
完成了前面三个步骤,我们也就生成了编译需要使用到的Makefile文件了。那么接下来的事情就需要nmake工具来帮助我们完成了,用的具体命令如下:
nmake
通过以上四步,我们就可以完成Qt源代码的编译了。怎么样,是不是觉得其实也不过如此啊,只是我们平时都被太过于智能化的IDE给“蒙蔽”了,我们虽然提高了开发效率,但是也在某种程度上失去了一些东西。个人觉得要向走的更高更远,我们需要自己去完成在平时的开发过程中本身由IDE代替我们完成的工作,当我们真正的熟悉原理之后,在让IDE帮我们工作,我们或许会做的更好!