在Clion中开发QT项目时使用vcpkg提供的第三方库,超详细教程,一步一图!
一: 配置Clion的QT开发环境
在欢迎界面选择(自定义 ) =》 (所有设置)
选择(构建、执行、部署)=》(工具链)
添加 Visual Studio(MinGW也可以,换成添加QT目录下的MinGW即可) ,如图
右边配置
名称:随意,自己记得就好
工具集: 选择到vs的安装目录即可
CMake:不管,让他自动选择
构建工具:vs安装目录\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja\ninja.exe
C编译器:vs安装目录\VC\Tools\MSVC\14.40.33807\bin\Hostx64\x64\cl.exe
C++编译器:vs安装目录\VC\Tools\MSVC\14.40.33807\bin\Hostx64\x64\cl.exe
调试器:不管,让他自动选择
如图:
然后点应用,再点确认就配置完成了
二、新建QT项目
选择(Qt 微件可执行程序)
位置:项目路径+项目名
Qt CMake 前缀路径: 选到QT安装的msvc目录(使用MinGW需要选到MinGW的目录)
语言标准:QT6已经支持c++17,不低于17就行
Qt版本: 6(我只试过6,5没试过,有需要可以自己试试)
如图:
创建完成后选择(设置)
然后选择(构建、执行、部署)=》(CMake)
将(工具链)更改为上面配置好的msvc工具链
如图
然后确认即可
现在尝试运行项目
右键 CMakeLists.txt 文件,选择(重新加载CMake项目)
再点击运行
应该可以正常运行弹出一个窗口
运行成功后在进行 CMakeLists.txt 中的配置
三、配置 CMakeLists.txt 以使用vcpkg
以下以fmt库为例
先通过vcpkg下载fmt库
我已经提前下好
下载命令:
vcpkg install fmt
回到Clion对 CMakeLists.txt 进行配置
1、在 CMAKE_PREFIX_PATH 后新增 vcpkg 安装的库的地址
例如:
set(CMAKE_PREFIX_PATH "D:/DeveloperComponents/Cpp/qt/6.7.2/msvc2019_64;此处替换为vcpkg安装目录/installed/x64-windows")
2、新增下面两个变量
将上面的变量的两个值分别复制给下面的两个变量
set(QT_CMAKE_PREFIX_PATH 上方第一段)
set(VCPKG_CMAKE_PREFIX_PATH 上方第二段)
3、给文件中自带的 target_link_libraries 中加上 PRIVATE 避免报错
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt::Core
Qt::Gui
Qt::Widgets
)
4、将 安装 fmt 时vcpkg在控制台打印的东西复制到 target_link_libraries 下面
find_package(fmt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt)
一定要注意将原文中的 main 换成 ${PROJECT_NAME}
5、设置两个新变量,说明安装的所有库,方便后面循环拷贝
如果有其他的可以直接在后面追加
# 重要!设置所有的库
# 所有安装的QT库
set(QT_LIB_LIST Core Gui Widgets)
# 所有通过vcpkg安装的库
set(VCPKG_LIB_LIST fmt)
6、修改 QT_INSTALL_PATH 变量
将 QT_INSTALL_PATH 的值 从 CMAKE_PREFIX_PATH 改为 QT_CMAKE_PREFIX_PATH
7、删除自带的拷贝循环
文件最后的foreach
在这个位置加入我提供的两个foreach
QT新版样式可选,不需要就不加,后面两个foreach必加
# QT新版样式库
if (EXISTS "${QT_INSTALL_PATH}/plugins/styles/qmodernwindowsstyle${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/styles/qmodernwindowsstyle${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles/")
endif ()
# 重要! 用于拷贝QT提供的库到项目构建文件夹
foreach (QT_LIB ${QT_LIB_LIST})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
# 重要! 用于拷贝vcpkg提供的库到项目构建文件夹
foreach (VCPKG_LIB ${VCPKG_LIB_LIST})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${VCPKG_CMAKE_PREFIX_PATH}/debug/bin/${VCPKG_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (VCPKG_LIB)
改完后需要和第二步(新建QT项目)一样(重新加载CMake项目)
然后进行构建
在此贴出 CMakeLists.txt 文件内容供大家参考
cmake_minimum_required(VERSION 3.29)
project(AAAA)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
# 需修改
set(CMAKE_PREFIX_PATH "D:/DeveloperComponents/Cpp/qt/6.7.2/msvc2019_64;D:/DeveloperComponents/Cpp/vcpkg/installed/x64-windows")
# 需新增
set(QT_CMAKE_PREFIX_PATH "D:/DeveloperComponents/Cpp/qt/6.7.2/msvc2019_64")
# 需新增
set(VCPKG_CMAKE_PREFIX_PATH "D:/DeveloperComponents/Cpp/vcpkg/installed/x64-windows")
find_package(Qt6 COMPONENTS
Core
Gui
Widgets
REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME}
PRIVATE
Qt::Core
Qt::Gui
Qt::Widgets
)
find_package(fmt CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE fmt::fmt)
# 重要!设置所有的库
# 所有安装的QT库
set(QT_LIB_LIST Core Gui Widgets)
# 所有通过vcpkg安装的库
set(VCPKG_LIB_LIST fmt)
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
# 需修改
set(QT_INSTALL_PATH "${QT_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 ()
# QT新版样式库
if (EXISTS "${QT_INSTALL_PATH}/plugins/styles/qmodernwindowsstyle${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/styles/qmodernwindowsstyle${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/styles/")
endif ()
# 重要! 拷贝库到项目构建文件夹
foreach (QT_LIB ${QT_LIB_LIST})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
# 重要! 拷贝库到项目构建文件夹
foreach (VCPKG_LIB ${VCPKG_LIB_LIST})
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${VCPKG_CMAKE_PREFIX_PATH}/debug/bin/${VCPKG_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (VCPKG_LIB)
endif ()
四、测试
最后去主函数中试一下看看是否链接成功
然后运行
控制台打印成功,并且QT窗口也打开了。
到此为止就已经成功了
有任何问题欢迎留言评论,我看到会第一时间回复,文章为原创,搬运请注明来源!