Qt + Clion + cmake 环境配置
创始人
2024-05-24 10:04:56
0

本文不涉及QML,因为我没用过

用C++写窗体,同时还有可视化UI界面,这不比控制台程序香吗?QAQ我大一写c++大作业的时候要是知道这个东西,我绝对满分啊!!!!

To:
新版的Clion 增加了对Qt的支持,的确是可以直接在Clion构建Qt项目,不过我的建议是先在Qt Creator里先新建项目(在这里构建的项目与在Clion里构建的项目,其CMakeLists.txt 有很大的不同,由Qt构建的CMake是最主要的部分,Clion的可以参考),可以运行了再尝试搬到clion去配置环境

ps:就算是使用Clion,设计ui的时候还是得回到 Qt Creator里的

目录

  • Qt安装内容
  • 环境配置
    • MinGW
    • MSVC
      • Debug调试
      • 编译问题
        • ...\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
        • error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号
        • Error running 'Build': Cannot start process, the working directory '...\cmake-build-debug-msvc' does not exist
  • 特殊技巧
    • 添加动态库
    • 打开ui文件

Qt安装内容

Qt的安装过程百度上到处都是这里就不写了,主要想分享的是我对于Qt安装器里下载的内容的了解:

在这里插入图片描述
咳咳 字有点小 将就一下 (>人<;)
在这里插入图片描述
我的Qt安装目录

Qt5.15.2 # 版本包mingw81_64 msvc2015_64msvc2019_64binassistant.exe # 查Qt API的designer.exe # ui设计器windeployqt.exe # 打包工具 libstdc++-6.dll # 超级重要的链接库  项目里缺了它就重定位不了 无法使用动态库opengl32sw.dll # opengl库...Srcdist Docs Examples # 样例 这个可以多看看 超有用installerResourcesLicensesTools # 工具包CMake_64 # CMake软件mingw810_64 # mingw 64位编译器Ninja # 忘了是啥了 反正挺重要的QtCreator # IDE QtDesignStudio # 图标设计器 sdktoolverdistcomponents.xmlInstallationLog.txtMaintenanceTool.exe # 安装器MaintenanceTool.datMaintenanceTool.ini network.xml

环境配置

Clion的配置主要还是靠Settings里的 Toolschains(工具) 和 CMake(具体运用到工程里的配置)
不需要添加到path(环境变量)里
Qt x.xx.x/msvc/bin 得添加到 path里,不然程序找不到Qt的动态库

MinGW

配置
Qt 5.15.2 + clion 2022.3.2 + mingw81_64(Qt里安装的那个)
在这里插入图片描述
在这里插入图片描述
虽然官网说CMAKE_PREFIX_PATH可以写在CMakeLists.txt,但我不建议你写在CmakeLists.txt里,毕竟和别人合作写项目时,别人可不一定有这个路径,而写在Settings里就没有这个问题

-G Ninja -DCMAKE_PREFIX_PATH=你的Qt下的mingw的路径

在这里插入图片描述

MSVC

配置
Qt 5.15.2 + clion 2022.3.2 + MSVC 2019
MSVC需要安装Visual Studio ,Qt只提供cmake及相关qt程序文件,在Visual Studio installer 里安装 MSVC xxxx c++生成工具+Windows SDK x

在这里插入图片描述
在这里插入图片描述

虽然官网说CMAKE_PREFIX_PATH可以写在CMakeLists.txt,但我不建议你写在CmakeLists.txt里,毕竟和别人合作写项目时,别人可不一定有这个路径,而写在Settings里就没有这个问题

-G Ninja -DCMAKE_PREFIX_PATH=你的路径

Debug调试

Clion无法查看QString等Qt特有的类的信息,需要额外的辅助

拷贝这个文件:qt5.natvis

放到项目的跟目录下,不需要其他设置,在你调试的时候Clion会自动寻找根目录下的这个文件

编译问题

…\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突

main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::~QString(void)" (__imp_??1QString@@QAE@XZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QString::QString(char const *)" (__imp_??0QString@@QAE@PBD@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QApplication::QApplication(int &,char * *,int)" (__imp_??0QApplication@@QAE@AAHPAPADH@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QApplication::~QApplication(void)" (__imp_??1QApplication@@UAE@XZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: static int __cdecl QApplication::exec(void)" (__imp_?exec@QApplication@@SAHXZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::show(void)" (__imp_?show@QWidget@@QAEXXZ),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall QWidget::resize(int,int)" (__imp_?resize@QWidget@@QAEXHH@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QPushButton::QPushButton(class QString const &,class QWidget *)" (__imp_??0QPushButton@@QAE@ABVQString@@PAVQWidget@@@Z),函数 _main 中引用了该符号
main.cpp.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall QPushButton::~QPushButton(void)" (__imp_??1QPushButton@@UAE@XZ),函数 _main 中引用了该符号
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Widgetsd.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Guid.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突
D:\Tools\IDE\Qt\5.15.2\msvc2015_64\lib\Qt5Cored.lib : warning LNK4272:库计算机类型“x64”与目标计算机类型“x86”冲突

注意了这不是通常可以忽略的警告,而是非常严重的报错,会导致找不到Qt5Widgetsd.lib链接库的

分析:Clion里的MSVC配置那里Architecture 属性和qt下载下来的msvc的不符,找个可以运行的qt项目,照抄qt creator的配置就行

解决方法: Settings-> Build, Execution, Deployment-> Toolchains里找到 MSVC 工具修改Architectureamd64

你可以打开Qt creator看一下对不对

error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号

main.cpp.obj : error LNK2019: 无法解析的外部符号 _RTC_CheckStackVars,函数 main 中引用了该符号
main.cpp.obj : error LNK2001: 无法解析的外部符号 _RTC_InitBase
main.cpp.obj : error LNK2001: 无法解析的外部符号 _RTC_Shutdown
main.cpp.obj : error LNK2001: 无法解析的外部符号 __CxxFrameHandler4
LINK : error LNK2001: 无法解析的外部符号 mainCRTStartup
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\kernel32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\user32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\gdi32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\winspool.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\shell32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\ole32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\oleaut32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\uuid.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\comdlg32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Windows Kits\10\\lib\10.0.22000.0\\um\x86\advapi32.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86\MSVCRTD.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突
D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x86\msvcprtd.lib : warning LNK4272:库计算机类型“x86”与目标计算机类型“x64”冲突

分析:使用了clion自动从vs里检测到的cmake,改成qt自己的就行

解决方法: Settings-> Build, Execution, Deployment-> Toolchains里找到 MSVC 工具修改cmake...\Qt\Tools\CMake_64\bin\cmake.exe

Error running ‘Build’: Cannot start process, the working directory ‘…\cmake-build-debug-msvc’ does not exist

分析:使用了Ninja,虽然不知道为啥不能自动生成Debug输出文件

解决方法:File-> Roload CMake Project

特殊技巧

添加动态库

先看这个:关于为什么我们不需要为Qt的库设置路径就可以使用动态库 - find_package与CMake如何查找链接库详解

咳咳,对于外部库用的还不多,我目前的做法是:

1. link_directories( 链接库的文件夹目录 )
# add_executable 在它俩中间 位置不可变
2. target_link_libraries( 链接库名 )
3. 把链接库拷贝到 cmake-build-debug(那个橙色文件夹) 的 根目录 下 

主要注意的是:

如果使用的是MSVC,在Debug模式下,MSVC使用的库的后缀名都是-d.dll,比如说使用Qt5Core,需要链接的是 Qt5Cored.dll而不是 Qt5Core.dll

打开ui文件

Clion 打开Qt的ui文件
一个很久之前学到的小技巧,我忘了当时参照的是哪篇博客了,过程跟上面这个很像,不过现在没测试过是否成功

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...