今天给大家讲解一下Cmake如何编译Qt程序。
这里说的Qt程序不只是用QtCreator写出来的程序,当然也可以是文本编辑器…。这里说的Qt程序是指,QCoreApplication,QApplication( QMainWindow,QWidget,QDialogue)类型的程序。
CMake是一个跨平台的非常通用的于编译器,用cmake命令可以生产出makefile,在利用make编译程序,这里不多说了,大家比较了解。当然首先得有CMakeLists.txt,我们手动建立一个.txt文件或者利用QtCreator新建一个CMake工程都可以,下面就来看一下,如何写这个CMakeLists,好让Qt程序能编译通过。
- 一个CMakeLists.txt的完整示例与分块讲解
- 如何添加Qt库
-
如何添加 .ui文件与资源文件.qrc
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
编译时自动打开moc,这个也是一个预编译器,比编译器的预编译还要早,它会把所有类文件中加了Q_OBJECT宏定义的编译成moc_*.cpp,对于自定义信号槽方法,必须加Q_OBJECT,不然会找不到信号槽,而且不会生成moc,完了还得手动moc缺的.cpp文件,然后改头文件。因此打开,并且该加Q_OBJECT就加 …
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2 . 如何添加Qt库
下面的这一段是如何添加Qt的库到程序内,对于Qt5来说,写法与Qt4存在较大差别,不再利用整个包含的原则,而是分模块添加,如下,演示例子用到了5个模块,分别添加进来
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
下面这一段应该算是这个水博的重点了吧…
利用qt5_wrap_ui可以把.ui文件包裹成一个ui_*.h文件,这里定义到${ui_FILES}变量里,在可执行文件中需要加入目标文件中, 利用qt5_add_resources()命令,添加生成的qrc_*.cpp和其他源文件以及ui_*.h到target内
- 1
- 2
- 3
- 1
- 2
- 3
如果按照下面的写法,利用qt5_use_modules(targetname modulesname)命令,则在链接时, 即target_link_libraries时不需要再包含Qt的libraries,替代了下面这种写法:
- 1
- 2
- 1
- 2
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
最后给大家个链接,有问题上去查一查
http://qt.developpez.com/doc/5.0-snapshot/cmake-manual
对于QT而言一般是采用qmake来配置工程,优点是简单直接。在许多工程开发中,QT常常会与其他的工程结合使用,这样qmake就难以管理工程。这里主要介绍使用CMake来配置QT工程。使用CMake优点之一是可以将代码文件和工程文件分离,使得工程结构更加清晰,也便于代码移植;之二是可以与其他的用CMake管理的工程结合,例如ITK,VTK,OpenCV等。采用CMake配置QT工程主要分为以下四个步骤:
1.使用QCreator创建工程MIStudio。
2. 新建一个工程目录,在其中建立两个目录,source存放代码文件,bin存放工程文件。将test工程中的代码、UI和资源文件拷贝到source目录中(main.h mainwindow.h mainwindow.cpp mainwindow.ui MIStudio.qrc)。
3. 添加CMakeLists.txt文件,文件内容有以下四个部分
(1) 添加CMakeLists.txt头信息
PROJECT (MIStudio)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
(2) 添加QT4库
FIND_PACKAGE (QT4 REQUIRED)
INCLUDE (${QT_USE_FILE})
INCLUDE_DIRECTORIES (${CMAKE_CURRENT_BINARY_DIR})
ADD_DEFINITIONS (${QT_DEFINITIONS})
(3) 将.h文件进行moc操作,ui文件进行uic操作,资源文件进行rcc操作
SET (MISTUDIO_HEADERS mainwindow.h)
SET (MISTUDIO_UIS mainwindow.ui)
SET (MISTUDIO_QRCS MIStudio.qrc)
SET (MISTUDIO_SRCS main.cpp mainwindow.cpp ${MISTUDIO_QRCS})
QT4_WRAP_CPP (MISTUDIO_HEADERS_MOC ${MISTUDIO_HEADERS})
QT4_WRAP_UI (MISTUDIO_UIS_UIC ${MISTUDIO_UIS})
QT4_ADD_RESOURCES (MISTUDIO_QRC_RCC ${MISTUDIO_QRCS})
(4) 添加工程,并连接QT库
ADD_EXECUTABLE (MIStudio ${MISTUDIO_SRCS}
${MISTUDIO_HEADERS_MOC}
${MISTUDIO_UIS_UIC}
${MISTUDIO_QRC_RCC})
TARGET_LINK_LIBRARIES (MIStudio ${QT_LIBRARIES})
4. 打开CMake对工程进行配置,选择source文件源文件目录,选择bin为编译目录配置后,生成工程并编译,即可完成一个基于CMake管理的QT工程。