首页 > 解决方案 > 如何列出 Qt5 的所有 CMake 组件?

问题描述

我知道在 CMake 中我可以找到并需要我需要的 Qt5 库,代码如下:

find_package(Qt5 5.12.0 REQUIRED
    COMPONENTS Gui Qml QuickControls2 Svg
)

但是我怎么知道我可以列出的确切名字COMPONENTS呢?

标签: qtcmake

解决方案


组件名称由包解释(这里:Qt5),而不是 CMake 本身(参见参考资料)。所以他们的命名方案是特定于包的。在 Qt5 的情况下,${QT5_DIR}/lib/cmake/Qt5/Qt5Config.cmake表明它们的名称与 CMake 模块名称相同,但没有Qt5前缀:

foreach(module ${Qt5_FIND_COMPONENTS})
    find_package(Qt5${module} ... )
    ...
endforeach()

因此,要列出所有组件名称,只需列出 CMake 模块(从相应的ModuleNameConfig.cmake文件名派生)并省略Qt5前缀。在 Linux 下,这可以完成工作并将输出分类为列:

find /path/to/your/qt5/ -name "*Config.cmake" |
  sed 's/^.*\/Qt5//; s/Config.cmake$//; /^\s*$/d' |
  sort | pr -t -3

从 Qt 5.12 开始,这列出了COMPONENT如下名称:

3DAnimation             Help                    QuickWidgets
3DCore                  LinguistTools           RemoteObjects
3DExtras                Location                RepParser
3DInput                 Multimedia              Scxml
3DLogic                 MultimediaWidgets       Sensors
3DQuick                 Network                 SerialPort
3DQuickAnimation        Nfc                     Sql
3DQuickExtras           OpenGL                  Svg
3DQuickInput            OpenGLExtensions        Test
3DQuickRender           Positioning             TextToSpeech
3DQuickScene2D          PositioningQuick        UiPlugin
3DRender                PrintSupport            UiTools
AndroidExtras           Qml                     WebChannel
Bluetooth               Quick                   WebSockets
Concurrent              QuickCompiler           WebView
Core                    QuickControls2          Widgets
Gamepad                 QuickTemplates2         Xml
Gui                     QuickTest               XmlPatterns

推荐阅读