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.创建
2.选择qmake
默认即可
继续
完成创建,如下:
Clion配置
建议用Clion2021.1.*以上的版本(便捷使用qt项目,详细原因不解释)
接下来,打开clion,前提是已经配置好qt中的mingw、cmake(很简单),参考我的clion配置文章this
附上配图吧
toolchains
cmake
其实在clion中添加好qt的mingw,其他都会自动识别出来
4.用clion打开刚刚qtcreator创建的项目工程
会提示
点ok
其实会自动创建CMakeList.txt
在main.cpp同级目录下(最好是同级)自己手动添加cmake工程构建文件,文件名称:CMakeList.txt
5.CMakeList.txt文件内容(两种)
内容参考两种,两种都可以运行,只要配置正确
第一种clion生成
具体代码
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
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/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"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
endif ()
第二种qtcreator生成(简单)
具体代码:
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项目
加载成cmake工程成功标志
7.CMakeList.txt修改后加载
当每次修改CMakeList.txt,clion编辑器右上角会提示自动重新加载项目配置,
选 ‘Enable Auto Reload’ 即可。
8.运行
此时无论在clion上还是qtcreator是运行,都可以
- clion运行
- qtcreator运行
9.为clion添加外部工具qtdesigner.exe
此我们需要再把CLion与QT Designer链接,设置ExternalTool,点击File->Setting->Tools->External Tools,增加一项配置。
至此,OK~