使用CMake构建Qt工程

由于沉迷emacs,最近的技能树有点跑偏。事情的经过是这样的:

我和小伙伴搞了个小项目自娱自乐,在这个项目中,我们用的界面库是Qt。Qt自带了IDE——QtCreator,但是个人不是很喜欢用QtCreator。起初,我使用Visual Studio+QtPackage来进行我们Qt项目的开发,但后来发现将vs工程提交到git仓库是件很二的事情,同时考虑到跨平台的问题,最后决定使用CMake来重新构建我们的项目。而且,这样一来,我就可以用emacs进行开发了。

关于Cmake的介绍以及基本用法,墙裂建议浏览CMake官网以及官方提供的Tutorial。如果觉得看英文吃力,大家也可以参考这个中文博客:http://www.hahack.com/codes/cmake/。

OK,进入正题。

使用CMake构建Qt Widget工程

工程目录如下:

这个简单的示例项目仅有一个源文件——main.cpp,该程序的运行结果是显示一个标题为”Simple example”的空白窗口:

main.cpp没有什么特别值得讨论的地方,仅仅是个Qt的hello world程序。我们重点在于CMakeLists.txt,这是使用CMake构建项目的根本所在:

与Qt相关的代码仅仅是第7行,第9行,以及第19行。

set(CMAKE_AUTOMOC ON) :告诉CMake自动Moc需要Moc的C++文件。

find_package(Qt5Widgets) :查找QtWidgets库以及相关头文件。find_package的详细说明还是推荐大家大致浏览下,碰到问题的时候可以再仔细看看。

target_link_libraries(helloworld Qt5::Widgets) :链接QtWidgets库

使用CMake构建Qt Quick工程

Qt Quick Application跟Qt Widget Application相比,主要是多了对Qml库的依赖以及qml资源文件的添加。

工程目录如下:

main.cpp的内容如下,主要功能是创建一个qml application engine,并加载qml文件。

qml.qrc是qt的资源描述文件,Qt程序要用到的资源文件都在qrc文件中进行描述。

具体的qml文件里写的是啥,在这里不做过多讨论,仅仅是将其贴出来供大家实践用。

mian.qml

MainForm.ui.qml

接下来还是重点讨论CmakeLists.txt文件

find_package(Qt5Qml) , find_package(Qt5Quick) 查找QtQml和QtQuick库及其头文件。

qt5_add_resources(RES_SOURCE qml.qrc) 将qrc文件的路径存放在变量RES_SOURCE中。

add_executable(hello WIN32 main.cpp ${RES_SOURCE}) 为工程指定源文件以及资源文件,在CMake中用${VAR}的形式引用变量,这里我们用到了存放qrc文件路径的变量RES_SOURCE。

target_link_libraries(hello Qt5::Widgets Qt5::Qml Qt5::Quick) 链接QtWidget,QtQml, QtQuick。

小结

使用CMake来构建简单的Qt项目,仅需要完成三件事情:

  1. 设置CMAKE_AUTOMOC
  2. 查找并依赖Qt Library
  3. 添加资源文件

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注