为什么在构建 Qt 6.1.2 示例时需要 lld-link.exe?

why lld-link.exe is needed when building Qt 6.1.2 examples?

我正在尝试使用 MSVC2019 工具包构建 Qt 的模拟时钟示例,但是 Qt Creator 抱怨如下。我很好奇为什么需要 lld-link.exe,而我想使用 MSVC2019 作为编译器。

我觉得有趣的是,在 Makefile.Debug 中,CC 和 CXX 设置为 clang-cl。

我可能对 Qt Creator / Qt Examples 如何使用 MSVC2019 有一些误解。

任何评论都非常感谢。

套件配置

工具 > 选项 > 套件 > 套件

工具 > 选项 > 工具包 > 编译器

编译输出

01:49:57: Running steps for project analogclock...
01:49:57: Starting: "C:\Qt.1.2\msvc2019_64\bin\qmake.exe" C:\Qt\Examples\Qt-6.1.2\widgets\widgets\analogclock\analogclock.pro -spec win32-clang-msvc "CONFIG+=debug"
01:49:57: The process "C:\Qt.1.2\msvc2019_64\bin\qmake.exe" exited normally.
01:49:57: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" -f C:/Qt/Examples/Qt-6.1.2/widgets/widgets/build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug/Makefile qmake_all

jom 1.1.3 - empower your cores

01:49:57: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited normally.
01:49:57: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" 
    C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt.1.2\msvc2019_64\include -IC:\Qt.1.2\msvc2019_64\include\QtWidgets -IC:\Qt.1.2\msvc2019_64\include\QtGui -IC:\Qt.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\analogclock.obj.3280.0.jom
    clang-cl -BxC:\Qt.1.2\msvc2019_64\bin\qmake.exe -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -E C:\Qt.1.2\msvc2019_64\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h
    C:\Qt.1.2\msvc2019_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB --compiler-flavor=msvc --include C:/Qt/Examples/Qt-6.1.2/widgets/widgets/build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug/debug/moc_predefs.h -IC:/Qt/6.1.2/msvc2019_64/mkspecs/win32-clang-msvc -IC:/Qt/Examples/Qt-6.1.2/widgets/widgets/analogclock -IC:/Qt/6.1.2/msvc2019_64/include -IC:/Qt/6.1.2/msvc2019_64/include/QtWidgets -IC:/Qt/6.1.2/msvc2019_64/include/QtGui -IC:/Qt/6.1.2/msvc2019_64/include/QtCore -I. -I"C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MSVC.29.30037\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio19\Community\VC\Tools\MSVC.29.30037\include" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK.8\include\um" -I"C:\Program Files (x86)\Windows Kits\include.0.19041.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\include.0.19041.0\shared" -I"C:\Program Files (x86)\Windows Kits\include.0.19041.0\um" -I"C:\Program Files (x86)\Windows Kits\include.0.19041.0\winrt" -I"C:\Program Files (x86)\Windows Kits\include.0.19041.0\cppwinrt" ..\analogclock\analogclock.h -o debug\moc_analogclock.cpp
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt.1.2\msvc2019_64\include -IC:\Qt.1.2\msvc2019_64\include\QtWidgets -IC:\Qt.1.2\msvc2019_64\include\QtGui -IC:\Qt.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\main.obj.3280.63.jom
    clang-cl -c -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\analogclock -I. -IC:\Qt.1.2\msvc2019_64\include -IC:\Qt.1.2\msvc2019_64\include\QtWidgets -IC:\Qt.1.2\msvc2019_64\include\QtGui -IC:\Qt.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt.1.2\msvc2019_64\mkspecs\win32-clang-msvc -Fodebug\ @C:\Users\MIKE-~1\AppData\Local\Temp\moc_analogclock.obj.3280.344.jom
    lld-link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\analogclock.exe @C:\Users\MIKE-~1\AppData\Local\Temp\analogclock.exe.3280.2329.jom
'lld-link' is not recognized as an internal or external command,
operable program or batch file.
jom: C:\Qt\Examples\Qt-6.1.2\widgets\widgets\build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug\Makefile.Debug [debug\analogclock.exe] Error 1
jom: C:\Qt\Examples\Qt-6.1.2\widgets\widgets\build-analogclock-Desktop_Qt_6_1_2_MSVC2019_64bit-Debug\Makefile [debug] Error 2
01:50:00: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project analogclock (kit: Desktop Qt 6.1.2 MSVC2019 64bit)
When executing step "Make"
01:50:00: Elapsed time: 00:03.

Makefile.DEBUG

#############################################################################
# Makefile for building: analogclock
# Generated by qmake (3.1) (Qt 6.1.2)
# Project:  ..\analogclock\analogclock.pro
# Template: app
#############################################################################

MAKEFILE      = Makefile.Debug

EQ            = =

####### Compiler, tools and options

CC            = clang-cl
CXX           = clang-cl
DEFINES       = -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
CFLAGS        = -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -utf-8 -W3 /Fddebug\analogclock.vc.pdb $(DEFINES)
CXXFLAGS      = -nologo -Zc:wchar_t -Wno-microsoft-enum-value -fms-compatibility-version=19.29.30038 -Zi -MDd -std:c++17 -utf-8 -W3 -w34100 -w34189 -w44996 -EHsc /Fddebug\analogclock.vc.pdb $(DEFINES)
INCPATH       = -I..\analogclock -I. -IC:\Qt.1.2\msvc2019_64\include -IC:\Qt.1.2\msvc2019_64\include\QtWidgets -IC:\Qt.1.2\msvc2019_64\include\QtGui -IC:\Qt.1.2\msvc2019_64\include\QtCore -Idebug -IC:/VulkanSDK/1.0.51.0/Include -IC:\Qt.1.2\msvc2019_64\mkspecs\win32-clang-msvc 
LINKER        = lld-link



根据我对问题的评论,为 MSVC2019 自动检测的 Qt Kit 设置似乎使用了错误的编译器。虽然在 Windows 上使用 LLVM (clang) 编译器当然是可能的,但我个人只使用“官方”LLVM 发行版(不是 MSVC 中包含的任何东西)来做到这一点。

无论如何,解决此问题的一种方法是手动添加正确的套件。最简单的方法应该是(根据问题中的屏幕截图):

  1. 在套件设置中,select 现有 Desktop Qt6.1.2 MSVC2019 64bit 套件。
  2. 使用 Clone 按钮创建它的副本,然后 select 从列表中创建副本。
  3. 在副本中,只需将两个编译器选项更改为使用 Microsoft Visual C++ Compiler 16.10.31424.327 (amd64)(即使其中一个用于“C”编译器,它们都在名称中写“C++”也没关系)。
  4. 调整套件名称,以便您知道项目设置中的套件名称。也许更改自动检测到的损坏的套件名称以包含“LLVM”或“损坏”或类似的名称以区分它。 “确定”退出选项对话框。
  5. 现在在项目构建设置中,您将能够select 新添加的工具包。只需单击它即可启用它。您可能还想禁用损坏的套件(右键单击套件名称以显示菜单)。

请记住,Qt 6.1 的功能尚未完成(并非 5.x 中的所有内容都已移植),但包含的示例应该可以使用。即将发布的 6.2 版本应该会更完整,但仍然会破坏很多 5.x 内容。要尝试与大多数现有 Qt 项目向后兼容的更成熟的版本,请使用 5.12.x 或 5.15.x 版本。

显然我需要在我的 VS2019 安装中添加对 Clang/LLVM 的支持。

按照下面讨论的说明进行操作:

Clang/LLVM Support in Visual Studio

On Windows, it’s easy to install the Clang tools. Just grab the “Clang compiler for Windows,” an optional component of the “Desktop development with C++” workload. This will install everything you need to develop with Clang on Windows.

这是我通过 Visual Studio 安装程序

完成的方法