您的位置:首页 > 编程语言 > Qt开发

QTCreator+MingW+cmake环境编译nana库

2013-08-06 16:52 477 查看
nana库是CSDN网友jinhao开发的C++ GUI库。大量使用了C++0x以及11的语法特性,而且已经可以在Linux/X11和win平台下跑起来,个人来看还是蛮喜欢。看起来,jinhao很希望把nana推向boost,说不定很有前途呢。尽管nana尚处于开发中,我还是忍不住要玩两下。

尽管纯属个人兴趣,编程的时候我还是喜欢有个顺手的IDE。眼下能够横跨Linux和windows的开源IDE也不算少,Codelite,code blcoks ,和QT都不错。jinhao随库提供了code blocks的工程文件。但是相比较之下,我现在觉得QTCreator最近发展的不错,更加顺手,而且对cmake的支持相当不错。此文就以QTCreato+cmake环境,记录一下编译nana库的简单步骤吧。

公司电脑没有linux环境,性能只适合于办公使用,安装虚拟机跑linux相当费劲,所以俺还是选择mingw环境来测试。

值得一提的是,nana本身分成了C++11和03两个分支,我这边使用的是11分支,按说并不需要boost库支持。但是在使用mingw构建的时候,由于跨平台移植的缘故,涉及到线程相关的部分,貌似还是需要引入boost的线程库。不过mingw/GCC进化到4.8.1以后,已经可以原生支持std::thread、mutex....了。不过你需要直接从codeplex的仓库里直接下载最新版的nana源码,并且做一点小小的hack(注释一行算hack么:))。

由于开源软件日新月异,这里我只是简单说明下环境, QT Creator采用的是2.8.0,cmake 2.8.10,mingw/GCC 4.8.1 (Thread model: posix)这些工具请自行下载并配置。

nana 下载地址:http://nanapro.codeplex.com/,记得使用Download打包的最新源码。



下载之后,将nana的C++11分支解压到硬盘,下面我们开始工作。由于QTCreator支持cmake工程,所以我们先行编写一个适用于nana库编译的cmakelists.txt文件,并将其置于nana源码的根目录之下。

CMakeLists.txt(大小写敏感的哈,不对的话QTCreator就不睬你了) 代码如下:

简要说明几点:

1、由于是个人使用,眼下又在windows平台下编译,需要剔除linux X11的相关代码。当切换到linux平台的时候你懂的 需要将两处".*linux_X11.*"替换成 ".*win32.*"

2、cmake默认需要在源码的各级子目录下分别放一个CMakeLists.txt ,偏偏jinhao采用的源码目录结构子目录蛮多的,到处都是这玩意的话,既繁琐也不科学。为此,采用了cmake 2.8之后的新特性,遍历源码子目录取得cpp列表并剔除平台相关的部分源文件即可。

此外,为了方便寻找编译好的nana库,指定lib输出目录在源码根目录下的/lib下。

接下来你可以打开QTCreator,并选择打开此cmakelists.txt,然后IDE会提示你初次配置,唯一需要说明的是,cmake可以采用外部编译的方式,以减少对源码目录结构的污染,QTCreator也会提示你cmake的相关配置文件的目录。我选择在nana库源码根目录下的build目录下新建一个cmake目录作为build文件的存身之处。然后执行cmake就完成工程配置了。

在正式build之前,需要对nana源码做个小改动,打开include/nana子目录下的config.hpp文件,注释掉一行:

	#if defined(__MINGW32__)
		#define NANA_MINGW
		#define STD_CODECVT_NOT_SUPPORTED
        //#define STD_THREAD_NOT_SUPPORTED //就这行....gcc 4.8.1已经可以原生支持thread特性了
	#endif



接下来不出意外的话,您就可以在/lib目录下得到libnana.a了。

为了顺利编译nana的两个demo,我还如法炮制,顺手写了个CMakeLists.txt,同样放置到demo的目录下用QTCreator打开即可。




这个也可以作为日后,使用nana库的简单模版,记得将NANA_DIR 设置为你的nana库所在的文件夹。另外,

CMAKE_EXE_LINKER_FLAGS所指定的link选项这里采用的是静态链接,并使用-mwindows选项去除了令人讨厌的命令行窗口,这在linux下面是不需要的。

最后,感谢jinhao在现代C++ GUI库上所做的尝试,也希望有更多的人支持国货:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: