c – 如何在Windows上使用带有Qt Creator的Clang套件?

(这个问题类似于
this one,但不一样)

我在Windows平台上使用QtCreator,通常使用vc工具链.
有时使用MinGW-W64,所以现在,我想尝试一些原因.
不像上面的帖子 – 我不使用Qt库,只使用qtcreator作为IDE,所以我想我不需要重新构建它和QtCreator用于使用clang工具包,这是正确的吗?

有几个问题:

> CLang发行版不包含平台甚至是c / c运行时库,我应该从vc工具包中使用它吗?或/和MinGW运行时?如何切换?
>如果错误,请纠正我的理解 – 对于Win平台,clang有两个选项可供使用:1)正常使用 – clang.exe,与任何其他平台一样2)clang-cl.exe – 附加层“看起来像”cl .exe,只是解析cl命令行键并调用普通的clang.
>据我所知,Windows平台没有LLDB,我可以使用GDB或CDB取决于使用的运行时库和可执行文件的二进制格式吗?

最后 – 如何在qtcreator中配置所有这些?

最佳答案 以下步骤仅适用于QYS Creator 4.5.1的MSYS2 64位安装(安装说明
here),其中您还在MSYS2上安装了MinGW-w64和mingw32-make;并且您正在构建非QT C或C应用程序.

这些指令使用QMake,因为QBS不支持MSYS2 clang.好吧,QMake也不支持它,但我确实弄清楚如何添加对QMake的支持,我没有弄清楚QBS.

有MSVC-clang的QMake支持,但它输出MSVC makefile,所以你不能用MSYS2 make构建它.所以这不适用于我们.

>用pacman安装clang.我用pacman -Ss mingw-w64-x86_64-clang,你的味道可能会有所不同.
>为QMake添加对clang的支持:

>在MSYS2 shell中,进入/ msys64 / mingw64 / share / qt5 / mkspecs /
>做cp -a win32-g win32-clang-msys
>编辑win32-clang-msys / qmake.conf并将gcc更改为clang,将g更改为clang(每个2个位置)
>在同一个文件中,取出clang不支持的-fno-keep-inline-dllexport -mthreads.

>在QT Creator中,设置一个新工具包:

>转到管理工具包.
>为C添加自定义编译器并浏览到已安装的路径(MSYS2安装下的/mingw64/bin/clang.exe).
>在同一位置为C作为clang .exe添加自定义编译器)
>添加一个名为Clang的手动工具包,并将这两个编译器设置为其编译器.
>在手动套件配置中将“Qt mkspec”设置为win32-clang-msys
>将“QT版本”设置为某种东西.即使我使用的是非QT项目,如果“Qt version”设置为None,IDE也不喜欢使用该套件.

现在,您可以尝试使用Clang工具包和QMake构建项目.

我最初尝试使用QBS,由于this bug,构建失败.但是如果我复制粘贴它们并删除了伪造的-target开关,那么构建命令就会成功.因此,对于QBS用户,我猜你必须在此期间切换到QMake,直到他们修复该bug.

故障排除:我有时会收到错误Project ERROR:无法解析编译器输出的默认搜索路径.这是QMake缺乏对clang支持的问题.如果我构建在.pro文件的子目录中,则错误往往不会发生,但如果我在兄弟目录中构建,则会发生错误.

解决方法:回到win32-clang-msys / qmake.conf.将第一个铿锵声改回g.然后“运行Qmake”(来自QT创建者或命令行),然后将其更改回来.第一次运行QMake时,它会写入文件.qmake.stash,然后不需要再次生成它.这个文件的内容对我来说是假的,但无论如何建筑似乎都有效.

未定义的引用:我发现与-static的链接产生了一堆对__imp__cxa_名称的未定义引用.不确定这里的问题是什么,但可能与生成.qmake.stash的错误有关.我想Qt开发人员需要正式为QMake添加非MSVC Clang支持.

多个定义:CLang链接器为内联DLLexport函数提供了多个定义.我发现没有解决方法; g有-fno-keep-inline-dllexport来避免这个问题,但是CLang 5不支持该标志.

点赞