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

时间:2016-10-31 11:19:32

标签: c++ windows clang qt-creator

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

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

有几个问题:

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

1 个答案:

答案 0 :(得分:1)

以下步骤仅适用于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构建它。所以这不适用于我们。

  1. 使用pacman安装clang。我使用pacman -Ss mingw-w64-x86_64-clang,你的味道可能会有所不同。
  2. 为QMake添加对clang的支持:
    1. 在MSYS2 shell中,进入/msys64/mingw64/share/qt5/mkspecs/
    2. cp -a win32-g++ win32-clang-msys
    3. 修改win32-clang-msys/qmake.conf并将gcc更改为clang,将g++更改为clang++(每个2个)
    4. 在同一个文件中,取出clang不支持的-fno-keep-inline-dllexport -mthreads
  3. 在QT Creator中,设置一个新工具包:
    1. 转到管理工具包。
    2. 为C添加自定义编译器并浏览到已安装的路径(MSYS2安装下的/mingw64/bin/clang.exe)。
    3. 将C ++的自定义编译器添加为clang++.exe在同一位置)
    4. 添加一个名为Clang的手动工具包,并将这两个编译器设置为其编译器。
    5. 在手动套件配置中将“Qt mkspec”设置为win32-clang-msys
    6. 将“QT版本”设置为某个内容。即使我使用的是非QT项目,如果“Qt version”设置为None,IDE也不喜欢使用该套件。
  4. 现在,您可以尝试使用Clang工具包和QMake构建项目。

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

    疑难解答:我有时会收到错误Project ERROR: failed to parse default search paths from compiler output。这是QMake缺乏对clang支持的问题。如果我构建在.pro文件的子目录中,则错误往往不会发生,但如果我在兄弟目录中构建,则会发生错误。

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

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

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