美文网首页
8.CMake编译Qt项目

8.CMake编译Qt项目

作者: Pokerpoke | 来源:发表于2017-11-27 20:23 被阅读0次

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)

相关文章

  • 8.CMake编译Qt项目

    CMake编译Qt项目 1.背景 对于Qt项目,一般情况下使用qmake进行编译,但是在编译过程中会对源代码有一定...

  • CMake教程——QT项目使用CMake

    QT项目使用CMake编译QT IDE会增加一些额外的配置,我便记录下: 备注1: QT中moc的作用: Qt 将...

  • QT使用心得

    刚刚开始学习qt创建项目,目前碰到qt工程路径不能包含中文 以及空格,否者编译会报错

  • 实用工具2-Txt文本分割工具

    项目需要自己写的一个Txt分割工具,用Qt静态库(Qt5.11.0 mingw 32bit static)编译的,...

  • QT5编译QT4项目

    背景 qt5版本为5.14.1在qt5中直接编译qt4项目会报错找不到QApplication等错误,根据网上超找...

  • Ubuntu Mate编译移植Qt5.4.1

    编译移植QT 若需要移植tslib库则你同时还需要编译tslib,在此只讲编译移植qt5.4.1. 1.解压qt-...

  • Linux下Qt5无法输入中文解决办法

    最近有个项目需要在Linux使用中文输入,但是发现Qt Creator以及Qt编译出来的程序无法使用搜狗输入法输入...

  • [QT macdeployqt]dyld: Symbol not

    Qt项目在Mac下编译macdeployqt出现的问题如下: 解决方案链接:https://community.a...

  • Qt Designer使用技巧

    编译Qt Designer 安装Qt时,选择安装源码 用Qt Creator打开C:\Qt\Qt5.5.0\5.5...

  • "windwos.h":No such file or dire

    笔者在qt项目中遇到编译错误"windwos.h":No such file or directory,通过百度,...

网友评论

      本文标题:8.CMake编译Qt项目

      本文链接:https://www.haomeiwen.com/subject/vohqbxtx.html