• CMake结合Visual Studio中开发Qt应用程序注意事项


    Qt工程管理

    个人比较偏爱于使用CMake来管理C++工程,因为只要编写一个CMakeLists.txt文件,就可以在Windows和Mac上生成各自的IDE工程。在Windows上, CMake自然是生成Visual Studio工程文件了(新版Visual Studio貌似能直接倒入CMake工程了);Mac上生成XCode工程即可。开发Qt应用程序的时候,虽然有Qt Creator可以使用,甚至Qt Creator还可以直接导入CMake工程,但是其调试和错误提示功能实在太过寒碜,导致调试过程中各种郁闷。因此,本人在实际开发中一般使用CMake来管理Qt工程,然后在Visual Studio里面进行开发编译。一般一个Qt应用程序的CMakeLists文件结构如下:

    CMAKE_MINIMUM_REQUIRED(VERSION 3.8)
    PROJECT(Test C CXX)
    
    #############################################################################
    # Compiler and linker options
    ADD_DEFINITIONS(-Wall -DWIN32_LEAN_AND_MEAN) 
    
    SET(CMAKE_AUTOMOC ON)
    SET(CMAKE_AUTORCC ON) 
    SET(CMAKE_CXX_STANDARD 11) 
    
    FILE(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
    FILE(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h") 
    FILE(GLOB FORMS "${CMAKE_CURRENT_SOURCE_DIR}/*.ui") 
     
    SET(RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/resources.qrc)  
      
      
    #################################################################################
    # EXTERNAL LIBS
    FIND_PACKAGE(Qt5 COMPONENTS Core Widgets Gui REQUIRED) 
    qt5_wrap_ui(UI_HEADERS ${FORMS})
    
    INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_BINARY_DIR}/)
    
    ################################################################################
    # Compile target
    ADD_EXECUTABLE ( ${PROJECT_NAME} 
    				${SOURCE_FILES}
    				${HEADER_FILES}
    				${UI_HEADERS}  
    				${RESOURCES}) 
    # https://www.kdab.com/using-cmake-with-qt-5/
    qt5_use_modules(${PROJECT_NAME} Core Widgets Gui)  
    

    其中,有一点要注意的是“INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/)。这一行是为了包含UI生成的头文件,否则在编译的时候无法找到UI头文件会报错。

    备注

    使用CMake生成Qt工程,编译运行的时候需要注意一些事情。如果机器上装了多个版本的Qt库的话,使用CMake生成Qt工程的时候,最容易出错了。CMake在生成工程的时候,会去搜索用户和系统的Path路径,查找系统上安装的Qt库。如果工程编译后,再去修改PATH中的Qt版本路径,会出现一些诡异的现象。像我碰到的一些情况包括:(1)程序启动不起来或者报错“xxx找不到符号入口点”;(2)资源加载不到,典型的特征是使用QRC路径(如“:/style/default.qss”)来加载资源会失败;(3)程序无故崩溃或执行结果不正常。但凡出现了这样一些情况,而恰好工程又是采用CMake管理的,那么就要考虑下Qt库版本是不是混淆了。

  • 相关阅读:
    刷题篇--热题HOT 71-80
    刷题篇--热题HOT 61-70
    双飞翼布局介绍-始于淘宝UED
    css布局——百度前端技术学院
    CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
    CSS之BFC详解
    深入理解BFC和Margin Collapse
    CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
    3列、2列自适应布局,中部内容优先显示3列布局等方法
    三列布局,中间自适应
  • 原文地址:https://www.cnblogs.com/csuftzzk/p/cmake_visual_sutdio_qt.html
Copyright © 2020-2023  润新知