Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如

Clion使用cmake运行QtCreator创建的qmake项目,这也正是我希望的。既可用QtCreator运行qt的qmake项目进行debug、发布等,同时也可以享受clion编码、debug的便捷高效(对于jetbrains idea用户来说)。因为用qtcreaotr编写代码实在是不流畅、难用、编码提示慢而少。

建议用Clion2021.1.*以上的版本(便捷使用qt项目,详细原因不解释)

总体实现目标,两全其美:

  • qt的qmake项目在qtcreator、clion上的运行调试(无改动切换)
  • 使用qtcreator负责创建、发布项目
  • 使用clion编码、debug

在qtcreator中创建qmake项目

1.创建

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第1张图片

2.选择qmake

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第2张图片
默认即可
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第3张图片
继续
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第4张图片

完成创建,如下:
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第5张图片

Clion配置
建议用Clion2021.1.*以上的版本(便捷使用qt项目,详细原因不解释)

接下来,打开clion,前提是已经配置好qt中的mingw、cmake(很简单),参考我的clion配置文章this
附上配图吧
toolchains
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第6张图片
cmake
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第7张图片
其实在clion中添加好qt的mingw,其他都会自动识别出来

4.用clion打开刚刚qtcreator创建的项目工程

会提示
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第8张图片
点ok
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第9张图片

其实会自动创建CMakeList.txt

在main.cpp同级目录下(最好是同级)自己手动添加cmake工程构建文件,文件名称:CMakeList.txt
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第10张图片

5.CMakeList.txt文件内容(两种)

内容参考两种,两种都可以运行,只要配置正确

第一种clion生成

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第11张图片
具体代码

cmake_minimum_required(VERSION 3.19)
project(window003)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_PREFIX_PATH "E:/develop/Qt/Qt5.14.2/5.14.2/mingw73_64")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(QT_VERSION 5)
set(REQUIRED_LIBS Core Gui Widgets)
set(REQUIRED_LIBS_QUALIFIED Qt5::Core Qt5::Gui Qt5::Widgets)

add_executable(${PROJECT_NAME}
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        )

if (NOT CMAKE_PREFIX_PATH)
    message(WARNING "CMAKE_PREFIX_PATH is not defined, you may need to set it "
            "(-DCMAKE_PREFIX_PATH=\"path/to/Qt/lib/cmake\" or -DCMAKE_PREFIX_PATH=/usr/include/{host}/qt{version}/ on Ubuntu)")
endif ()

find_package(Qt${QT_VERSION} COMPONENTS ${REQUIRED_LIBS} REQUIRED)
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBS_QUALIFIED})

if (WIN32)

    set(DEBUG_SUFFIX)
    if (CMAKE_BUILD_TYPE MATCHES "Debug")
        set(DEBUG_SUFFIX "")  # 此处去掉""d
    endif ()

    set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
    if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
        set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
            set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
        endif ()
    endif ()
    if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E make_directory
                "$/plugins/platforms/")
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
                "$/plugins/platforms/")
    endif ()
    foreach (QT_LIB ${REQUIRED_LIBS})
        add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                COMMAND ${CMAKE_COMMAND} -E copy
                "${QT_INSTALL_PATH}/bin/Qt${QT_VERSION}${QT_LIB}${DEBUG_SUFFIX}.dll"
                "$")
    endforeach (QT_LIB)
endif ()

第二种qtcreator生成(简单)

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第12张图片
具体代码:

cmake_minimum_required(VERSION 3.5)

project(window003 LANGUAGES CXX)
set(CMAKE_PREFIX_PATH "E:/develop/Qt/Qt5.14.2/5.14.2/mingw73_64")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.

#if(ANDROID)
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
#    if (ANDROID_ABI STREQUAL "armeabi-v7a")
#        set(ANDROID_EXTRA_LIBS
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
#            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
#    endif()
#endif()

find_package(Qt5 COMPONENTS Widgets REQUIRED)

if(ANDROID)
  add_library(window003 SHARED
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
else()
  add_executable(window003
    main.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
  )
endif()

target_link_libraries(window003 PRIVATE Qt5::Widgets)

6.重新加载为cmake项目

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第13张图片

加载成cmake工程成功标志

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第14张图片

7.CMakeList.txt修改后加载

当每次修改CMakeList.txt,clion编辑器右上角会提示自动重新加载项目配置,
选 ‘Enable Auto Reload’ 即可。
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第15张图片

8.运行

此时无论在clion上还是qtcreator是运行,都可以

  • clion运行

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第16张图片

  • qtcreator运行

Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第17张图片

9.为clion添加外部工具qtdesigner.exe

此我们需要再把CLion与QT Designer链接,设置ExternalTool,点击File->Setting->Tools->External Tools,增加一项配置。
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第18张图片
Qt - Clion使用cmake运行QtCreator创建的qmake项目,无改动切换自如_第19张图片

至此,OK~

你可能感兴趣的:(Qt-开发工具,qt,开发语言)