8.CMake编译Qt项目

CMake编译Qt项目

1.背景

对于Qt项目,一般情况下使用qmake进行编译,但是在编译过程中会对源代码有一定程度上的改变,而使用CMake则没有这种烦恼,或者说比较简单的进行编译。

借用网上的一句话:

CMake is CMake, others are bullshit.

2.Qt

Qt(/ˈkjuːt/,發音同「cute」)是一个跨平台的C++應用程式開發框架。廣泛用於開發GUI程式,這種情況下又被称为部件工具箱。也可用於開發非GUI程式,比如控制台工具和伺服器。Qt使用於OPIE、Skype、VLC media player、Adobe Photoshop Elements、VirtualBox與Mathematica以及被Autodesk 、歐洲太空總署、夢工廠、Google、HP、KDE、盧卡斯影業、西門子公司、富豪集團, 華特迪士尼動畫製作公司、三星集團、飛利浦、Panasonic 所使用。
它是Digia公司的产品。Qt使用標準的C++和特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些巨集。通過語言綁定,其他的程式語言也可以使用Qt。
Qt是自由且開放原始碼的軟體,在GNU較寬鬆公共許可證(LGPL)條款下發布。所有版本都支援廣泛的編譯器,包括GCC的C++編譯器和Visual Studio。------Qt-wiki

3.准备工作

Qt环境配置,在这里使用Qt4版本。

sudo apt install qt4-default

4.CMakeLists.txt

# 查找相关的依赖库
find_package(Qt4 REQUIRED)
# 添加路径
include_directories($(QT_INCLUDES))

# 设置相关变量
# 自动添加当前目录至路径中
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 自动运行moc
set(CMAKE_AUTOMOC ON)
# 自动运行uic
set(CMAKE_AUTOUIC ON)
# 自动运行rcc
set(CMAKE_AUTORCC ON)

# 生成可执行文件
add_executable(main main.cc)
# 链接库
target_link_libraries(main Qt4::QtCore Qt4::QtGui)

至此已经可以编译单文件的Qt项目了。

5.使用Qt Designer进行界面设计

编译项目的时候会使用Qt Designer进行界面设计,完了会生成一个ui文件,我们需要将这个文件进行转换成相应的头件,当CMAKE_AUTOUIC设为ON的时候会自动生成相应的ui_xxxxx.h文件,只需要在相应的c++文件中#include ui_xxxxx.h即可。

如果没有开启该选项则可以在CMakeLists.txt使用以下命令进行手动生成。

qt4_wrap_ui(OUTPUT_FILED INPUT_FILES)

6.多个文件的情况

正常情况下我们会将不同界面写在不同文件里,假设我们的项目目录结构如下

├── CMakeLists.txt
├── test.cc
├── test.h
├── test.ui             # ui文件
├── main.cc             # 主函数所在文件

按照上面的步骤会出现如下错误或者一些函数为声明的错误

collect2: error: ld return 1 exit status

出现原因是因为没有将相关的文件生成动态库,自然找不到库文件或者函数声明了,解决方法是在CMakeLists.txt中添加如下命令:

# 生成动态库
add_library(test_lib SHARED test.cc test.h)
# 链接相关依赖
target_link_libraries(test_lib Qt4::QtCore Qt4::QtGui)

# 生成可执行文件
add_executable(main main.cc)
# 链接库
target_link_libraries(main test_lib Qt4::QtCore Qt4::QtGui)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注:首发地址 1. 前言 当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMa...
    cfanr阅读 24,562评论 1 53
  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 12,292评论 11 79
  • 转载自我的博客:CMake 简介和 CMake 模板。 如果你用 Linux 操作系统,使用 cmake 会简单很...
    district10阅读 11,568评论 3 27
  • 本篇文章旨在简介 Android 中 NDK 是什么以及重点讲解最新 Android Studio 编译工具 CM...
    Tsy远阅读 63,634评论 20 213
  • 最近,在看几本书都提到了一辈子学习的概念,如果不学习就会倒退,跟不上新的理念,“出了社会也要当书呆子”。每个人都要...
    求无1824阅读 375评论 2 0