`
cuijiemin
  • 浏览: 265403 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

CMake编译Qt

阅读更多

貌似有个CMake教程上说过“不要使用CMake编译Qt”,原因是Qt有自己的QMake,用CMake会费时费力,不过为了能把所有工程采用同样的编译方式,还是尝试了一下,的确很麻烦。

首先需要下载Qt SDK,因为打算用VS2010编译,所以下载了everywhere的4.7b2版本(注意:4.6.3不支持2010,强编会出错,4.7b2静态编译也会有同样的问题,估计正式版会有改善吧)

编译整体还是比较简单的

  1. 把VS目录下的vcvars32.bat复制到qt目录下
  2. 打开控制台,首先运行vcvars32.bat
  3. configure –platform win32-msvc2010
  4. nmake
  5. 等待N长时间编译完成,真的非常长时间
  6. 编译结果6G,保留bin,include,lib目录即可

4.7的编译有个缺点就是所有路径都是完整路径会写死,且不能选择编译结果的输出路径,所以要是打算多次编译一定要确定好目录,否则会很麻烦。

然后写一个简单的CMakeLists.txt文件:

#Project Name
PROJECT(BookStar)

SET(QT_FOLDER D:/qt-4.7.0-b2)

# include directories
INCLUDE_DIRECTORIES(inc
${PROJECT_BINARY_DIR}
${QT_FOLDER}/include)

# lib directories
LINK_DIRECTORIES(${QT_FOLDER}/lib)

# source
SET(SRCS
src/main.cpp
src/mainwindow.cpp
${MOCS}
)

# add exe
ADD_EXECUTABLE(BookStar ${SRCS})
TARGET_LINK_LIBRARIES( BookStar QtCore4 QtGui4 )

编译错误,原来Qt在编译时,需要首先使用uic.exe编译UI文件,通过moc.exe处理Q_OBJECT之类的宏,当然你可以去掉这些定义,否则就需要加上:

# COMPILE UIs
SET(UIS
mainwindow
)

FOREACH (ui_file ${UIS})
SET(TMP_IN "${PROJECT_SOURCE_DIR}/res/${ui_file}.ui")
SET(TMP_OUT "${PROJECT_BINARY_DIR}/ui_${ui_file}.h")
EXECUTE_PROCESS(COMMAND ${QT_FOLDER}/bin/uic.exe -o ${TMP_OUT} ${TMP_IN})
MESSAGE(STATUS "EXEC=${QT_FOLDER}/bin/uic.exe -o ${PROJECT_BINARY_DIR}/ui_${ui_file}.h ${PROJECT_SOURCE_DIR}/res/${ui_file}.ui")
ENDFOREACH(ui_file)

# CREATE MOC
SET(HEADERS
mainwindow
)

FOREACH (header_file ${HEADERS})
SET(TMP_IN "${PROJECT_SOURCE_DIR}/inc/${header_file}.h")
SET(TMP_OUT "${PROJECT_BINARY_DIR}/moc_${header_file}.cpp")
EXECUTE_PROCESS(COMMAND ${QT_FOLDER}/bin/moc.exe -o ${TMP_OUT} ${TMP_IN})
SET(MOCS ${MOCS} ${PROJECT_BINARY_DIR}/moc_${header_file}.cpp)
MESSAGE(STATUS "EXEC=${QT_FOLDER}/bin/moc.exe -o ${PROJECT_BINARY_DIR}/moc_${header_file}.cpp ${PROJECT_SOURCE_DIR}/inc/${header_file}.h")
ENDFOREACH(header_file)

这里要注意的是:EXECUTE_PROCESS在COMMAND后面不能加引号,命令直接写,否则执行的程序也不会出错,但也不会正常运行,这个曾让我纠结很久- -

当然为了实现简单,两个列表变量定义时都没有带扩展名,如果希望更清楚一些,则需要通过CMAKE的字符串处理处理一下。

编译是没有问题了,但FindQt4还不能用,不知道是不是编译时没有安装好,每次都找不到Qt的目录,这个还需要继续研究

分享到:
评论

相关推荐

    基于Cmake编译Qt第三方库-Opencv库及其在Qt的配置【2020-09-16】

    ### 基于Cmake编译Qt第三方库—Opencv库及其在Qt的配置 #### 一、背景介绍 在Windows环境下,为了更好地利用Qt框架进行图像处理开发工作,经常需要将Opencv作为第三方库集成到Qt项目中。本文旨在详细介绍如何通过...

    cmake编译不成功QT-opencv视觉库的看这里!

    然而,由于各种依赖关系和配置问题,有时在尝试用CMake编译QT与OpenCV的结合时可能会遇到困难。本文将深入探讨如何解决"cmake编译不成功QT-opencv视觉库"的问题。 首先,确保你的开发环境已经安装了必要的组件:Qt...

    Mac Qt5.9.8编译QWebEngine支持MP4的web相关库

    Qt的QWebEngine默认是不支持MP4播放的,需要手动编译,比较耗时(在配置没有问题的情况下我的i7 6核 16G内存大概用了6个小时),为了方便有同样问题的小伙伴,所以上传了已经编译好的资源,需要下载后替换clang_64/lib...

    cmake+qt5+log4cplus+vs2015源码工程模版

    整合了cmake编译qt5的vs2015工程模版,利用cmake编译qt5的vs2015工程模版, 可以更好的把项目模块话,其中还有log4cplus的cpp日志使用模版源码, 适合有一定的vs2015一起qt5开发经验的同学下载, 利用build目录里的...

    cmake搭建vs和qt环境实例

    在IT行业中,构建跨平台的软件项目经常需要利用构建工具来简化配置和编译过程,CMake就是这样一个工具。本文将深入探讨如何使用CMake来搭建Visual Studio(VS)和Qt的开发环境,并通过CMakeLists.txt文件进行项目...

    VTK-8.0 cmake编译

    VTK(Visualization Toolkit)是一个开源的三维图形处理...总的来说,理解和编译VTK 8.0涉及CMake构建系统、多平台兼容性、编译配置、依赖管理以及Qt集成等多个方面。熟悉这些知识点对于开发基于VTK的3D应用至关重要。

    cmake编译osg的资源包

    总之,使用CMake编译OpenSceneGraph涉及到第三方库的管理和资源数据的处理。理解CMake的工作原理以及如何配置CMakeLists.txt对于成功构建OSG项目至关重要。在实际操作中,可能还需要根据自己的系统环境和需求调整...

    VTK7.0.0的编译方法,我用的是WIN10 64位 VS2015,CMake编译

    VTK(Visualization Toolkit...总的来说,编译VTK 7.0.0涉及到对CMake、Visual Studio和可能的Qt的熟练使用,以及对编译流程的理解。通过这个过程,你可以更好地理解VTK的工作原理,并能根据自己的需求定制VTK的功能。

    CMake编译opencv mingw版本

    在本文中,我们将深入探讨如何在Windows 10 64位系统上使用CMake编译OpenCV 3.4.3版本,特别是在 MingW环境下,利用Qt5.11自带的MingW版本进行构建。CMake是一个跨平台的自动化构建系统,它可以帮助我们管理和配置...

    windows下Qt6 使用CMake 安装时自动拷贝Qt及其他依赖文件

    在Windows环境下,使用CMake构建Qt6项目时,往往需要处理Qt库和其他依赖文件的路径问题,确保在不同机器上运行程序时能够正确找到这些文件。这篇内容将深入讲解如何利用CMake配置过程来自动复制Qt及其依赖文件,以...

    CMake 生成Qt工程文件(vs2013 or vs2015)

    接着,使用`qt5_wrap_cpp()`或`qt5_add_resources()`处理Qt的MOC(元对象编译)和RC(资源文件)文件。最后,通过`target_link_libraries()`命令将Qt库链接到你的目标可执行文件上。 **Visual Studio集成** CMake...

    QtStaticCMake:使用CMake和静态Qt版本构建时生成Qt插件导入语句的宏集合

    在开发基于Qt的应用程序时,有时我们需要利用CMake来管理和构建项目,特别是在处理静态链接Qt库的场景下。"QtStaticCMake" 是一个宏集合,专为在使用静态Qt版本构建项目时生成Qt插件的导入语句而设计。这个工具解决...

    qt 使用 cmake 创建插件(QPluginLoader 加载插件编译文件) 项目文件

    qt 使用 cmake 创建插件(QPluginLoader 加载插件编译文件) 项目文件 说明 : ...qt 6 c++ cmake qt_generate_deploy_script qt_standard_project_setup qt_add_library qt_add_plugin QGenericPlugin ...

    QT DBUS通讯小程序

    QT DBUS通讯小程序是一种利用QT库和DBus技术实现的跨进程通信工具。DBus是一个轻量级的、基于消息的协议,允许不同的应用程序之间交换信息,它在Linux和其他类Unix系统中广泛使用。在这个项目中,QT作为一个强大的多...

    Cmake编译OsgEarth3.5的库

    4. **配置环境**: 根据你的操作系统,确保所有依赖库(如 OpenSceneGraph、GDAL、GLEW、Qt 等)都已安装并且可被 CMake 找到。 **使用 CMake** 1. **启动 CMake**: 打开 CMake GUI,指定源代码目录(包含 ...

    cmake+qt+qcustomplot

    `cmake`是一个构建系统,用于管理项目的编译过程,而`Qt`是一个功能强大的C++库,用于创建GUI应用程序,`QCustomPlot`则是`Qt`的一个扩展模块,专门用于绘制2D和3D图形。 `cmake`允许开发者编写跨平台的构建脚本,...

    CMake_Qt-源码.rar

    《CMake与Qt结合开发详解》 在软件开发过程中,构建工具和库的结合使用能够大大提高开发效率。本文将深入探讨CMake与Qt这两个强大的工具如何协同工作,以实现高效、跨平台的软件构建。 首先,CMake是一个开源的、...

    qtmqtt Qt6.2.4+VS2019 x64编译动态库及简单示例(附带Qt在线安装包+perl安装包)

    随着Qt6的发布,Qt官方开始推崇cmake编译,而qtmqtt对应的版本和Qt发布的版本一致的,所以qtmqtt从6.0发布以来,也开始默认用cmake编译。这样一来,很多之前习惯用Qt5的童鞋就有点摸不着头脑了,特别是一些刚入门的...

    用CMake编译osgQt常见错误处理

    本文将详细介绍如何解决这些问题,确保成功编译和链接osgQt库。 首先,当CMake无法找到OpenSceneGraph库及其相关组件时,会显示如下的错误信息: ``` Could NOT find OpenSceneGraph (missing: OPENSCENEGRAPH_...

    安装webAssembly环境(编译Qt6.3.1和ffmpeg5.1)

    ### 安装WebAssembly环境(编译Qt6.3.1和ffmpeg5.1) 本文旨在详细介绍如何在Windows 10环境下安装WebAssembly环境,并在此基础上编译Qt 6.3.1与ffmpeg 5.1。此外,还将提供在Ubuntu系统上编译ffmpeg的相关步骤。...

Global site tag (gtag.js) - Google Analytics