使用CMake构建Qt项目

1 篇文章 1 订阅

使用CMake构建Qt项目

  • 由于要做新的GUI设计加入更多的功能,在windows上已经安装了QtCreator,不想在Ubuntu下再装一个,于是采用在windows下开发,拿到Linux下编译运行,故使用CMake构建Qt项目。

1.Qt中的qmake

  • qmake可以利用源文件、头文件、qt的ui文件等生成各种不同类型的工程和工程需要的Makefile文件。
  • pro文件,添加各种源文件,还可以设定平台相关的不同源文件,设置各种规则,利用qmake命令生成工程。

QT中编译三步走:

  • qmake -project (用于创建.pro文件,将所有的文件编译成一个与平台无关的工程文件)
  • qmake (读取本身的Qt设置,生成与库一致的相应的Makefile)
  • make (根据生成的Makefile,将文件编译为二进制可执行程序)

2.CMake中的构建

  • CMake中使用的参数代表指CMakeLists.txt文件所在的目录。这个CMakeLists.txt文件控制了整个编译的过程。为了更彻底地理解它,我们用以下这个图来看看整个编译的流程。下面这张图表明用户编写的文件(源代码,头文件,.ui文件,.qrc文件)在编译过程中是如何被Qt的工具进行处理,并整合到整个编译流程中的。因为qmake是用于处理这个流程的,它隐藏了这个流程中的很多细节。

    img

  • Qt 不是使用的“标准的” C++ 语言,而是对其进行了一定程度的“扩展”。这里我们从Qt新增加的关键字就可以看出来:signals、slots 或者 emit。所以有人会觉得 Qt 的程序编译速度慢,这主要是因为在 Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。

  • Qt中,如果一个类要使用信号/槽功能,就必须在其中声明Q_OBJECT。只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。

    这时候,就必须在头文件派生类的时候,首先像下面那样引入Q_OBJECT宏:
    class MyMainWindow : public QWidget
    {
    Q_OBJECT

    }

  • moc是QT的预编译器,用来处理代码中的slot,signal,emit,Q_OBJECT等。moc文件是对应的处理代码,也就是Q_OBJECT宏的实现部分

  • 在头文件中如果有使用Q_OBJECT宏的话,则这个文件需要被moc进行处理,.ui文件也必须要由uic处理,.qrc文件需要由rcc程序处理。

3.具体构建过程

  • 下面是我在windows下写的扫雷程序文件(包含.ui .qrc)在这里插入图片描述

  • 下面是CMakeList.txt的内容。

#cmake版本
cmake_minimum_required(VERSION 3.5.1)

#项目名称
project(Minesweeper)

#让cmake自动去寻找Qt5
FIND_PACKAGE(Qt5 COMPONENTS Widgets REQUIRED)

#采用C++11标准
set(CMAKE_CXX_STANDARD 11)

#添加所有的源文件
SET(Minesweeper_SOURCES 
	dialog.cpp	
	main.cpp 
	mainwindow.cpp 
	minemap.cpp
	myitem.cpp
	myscene.cpp
	setpro.cpp
)

#添加所有的头文件
SET(Minesweeper_HEADERS 
	dialog.h
	mainwindow.h
	minemap.h
	myitem.h
	myscene.h
	setpro.h
)

#添加所有的.ui文件
SET(Minesweeper_FORMS 
	dialog.ui
	mainwindow.ui
	setpro.ui
)

#添加资源文件
SET(Minesweeper_RESOURCES 
	img.qrc
)
#调用预编译器moc,需要使用 QT5_WRAP_CPP宏
QT5_WRAP_CPP(Minesweeper_HEADERS_MOC ${Minesweeper_HEADERS})
#使用uic处理.ui文件
QT5_WRAP_UI(Minesweeper_FORMS_HEADERS ${Minesweeper_FORMS})
#使用rcc处理.qrc文件
QT5_ADD_RESOURCES(Minesweeper_RESOURCES_RCC ${Minesweeper_RESOURCES})

#这些生成的中间文件都会在build目录下,这样的话,编译器则不能定位由uic程序产生的诸如_ui_mainwindow.h等文件。所以,我们需要把build目录添加到包含目录中
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

#生成可执行文件
ADD_EXECUTABLE(Minesweeper 
	${Minesweeper_SOURCES} 
	${Minesweeper_HEADERS_MOC} 
    ${Minesweeper_FORMS_HEADERS}
	${Minesweeper_RESOURCES_RCC} 
)

#为target添加需要链接的共享库
TARGET_LINK_LIBRARIES(Minesweeper ${Qt5Widgets_LIBRARIES})
  • 下面是build的结果:

在这里插入图片描述

  • 下面是运行之后的结果:

在这里插入图片描述

4.结尾

  • 有了上面的构建,也可以完成其他资源的添加,结合新的底层就可以开发出好的界面和功能了。
### 回答1: 在 Windows 下使用 CMake 编译 Qt 可以分为以下几个步骤: 1. 安装 Qt 首先需要安装 Qt,可以从官网下载安装程序进行安装。安装完成后,需要设置环境变量 QTDIR,指向 Qt 的安装目录。 2. 安装 CMake CMake 是一个跨平台的开源构建工具,可以从官网下载安装程序进行安装。 3. 配置 CMake 在配置 CMake 之前,需要先创建一个 CMakeLists.txt 文件,该文件描述了项目构建过程。下面是一个简单的 CMakeLists.txt 文件示例: ``` cmake_minimum_required(VERSION 3.5) project(MyProject LANGUAGES CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt5 COMPONENTS Widgets REQUIRED) add_executable(MyApp main.cpp) target_link_libraries(MyApp Qt5::Widgets) ``` 上面的示例文件中,指定了项目的名称和编程语言为 C++,并且使用Qt 的 Widgets 模块。最后创建了一个可执行文件 MyApp,并链接了 Qt5::Widgets 库。 接下来,在命令行中进入项目目录,执行以下命令进行配置: ``` mkdir build cd build cmake .. ``` 上述命令中,首先创建一个 build 目录,然后进入该目录,最后执行 cmake 命令进行配置。配置完成后,会在 build 目录中生成 Makefile 文件。 4. 编译项目 在命令行中执行以下命令进行编译: ``` make ``` 编译完成后,会在 build 目录中生成可执行文件 MyApp。 以上就是在 Windows 下使用 CMake 编译 Qt 的基本步骤。注意,上述命令中涉及到的路径需要根据实际情况进行修改。 ### 回答2: 在Windows下使用CMake编译Qt可以采取以下步骤: 1. 安装Qt:首先,需要在计算机上安装Qt开发框架。可以从Qt官方网站下载适用于Windows的Qt安装程序,并按照提示完成安装。 2. 安装CMake:接下来,需要在计算机上安装CMake工具。可以从CMake官方网站下载适用于Windows的CMake安装程序,并按照提示完成安装。 3. 创建CMakeLists.txt文件:在项目的根目录下创建一个CMakeLists.txt文件。该文件包含描述如何构建项目的指令。 4. 配置CMake使用命令行或图形界面工具打开CMake,并指定项目的源代码和构建目录。将源代码目录指向包含CMakeLists.txt文件的根目录,并选择构建目录,用于生成构建文件。 5. 生成构建文件:点击"Configure"按钮,CMake将解析CMakeLists.txt文件,并根据指令生成构建文件。可以选择生成Makefile、Visual Studio工程文件或其他支持的构建系统文件。 6. 编译项目:点击"Generate"按钮,CMake将生成所选构建系统所需的文件,可以在构建目录中找到。 7. 构建项目使用所选的构建系统工具(例如,在Visual Studio中打开工程文件,或在命令行中使用make命令),进行实际的编译和构建过程。 8. 运行项目:完成编译后,可以在生成的可执行文件或库文件中找到生成的Qt应用程序,并运行它。 注意:在CMakeLists.txt文件中,应该指定项目需要的Qt模块和库,并确保CMake能够找到所需的Qt安装路径。可以使用find_package(Qt5 COMPONENTS ...)指令来查找并链接所需的Qt库。同时还可以设置其他构建选项,如编译器标志、链接选项等。 总之,使用CMake编译Qt项目可以提供更灵活和可移植的构建过程,可以轻松管理和跨平台编译Qt应用程序。 ### 回答3: 在Windows操作系统下使用CMake来编译Qt有以下几步: 1. 首先确保已经安装了CMakeQt。可以从官方网站上下载并安装它们。 2. 创建一个新的CMakeLists.txt文件,该文件会告诉CMake如何构建和编译我们的Qt项目。 3. 在CMakeLists.txt文件中,添加以下内容: ``` cmake_minimum_required(VERSION 3.5) project(MyQtProject) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) if(WIN32) set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.15.2/5.15.2/msvc2019_64") #设置Qt安装路径 endif() find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) file(GLOB_RECURSE SOURCES src/*.cpp) file(GLOB_RECURSE HEADERS include/*.h) add_executable(MyQtProject ${SOURCES} ${HEADERS}) target_link_libraries(MyQtProject PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets) ``` 其中的"project(MyQtProject)"可以根据实际项目名称进行修改。"set(CMAKE_PREFIX_PATH "C:/Qt/Qt5.15.2/5.15.2/msvc2019_64")"是设置Qt的安装路径,需要根据自己的实际安装路径进行修改。 4. 在项目根目录下创建一个build文件夹,用于存放生成的构建文件。 5. 打开命令提示符或者使用CMake GUI,并进入build文件夹的路径。 6. 在命令提示符或CMake GUI中执行以下命令来生成构建文件: ``` cmake .. ``` 7. 构建生成的构建文件,执行以下命令(如果使用CMake GUI,则可以直接点击“Generate”按钮): ``` cmake --build . ``` 8. 构建完成后,我们就可以在build文件夹中找到编译生成的可执行文件。 这样,我们就成功使用CMake来编译Qt项目了。记得根据自己的实际情况修改相应的路径和文件名。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值