【问题标题】:What to use instead of `qt5_use_modules`?用什么代替`qt5_use_modules`?
【发布时间】:2015-09-19 06:00:03
【问题描述】:

Qt 5 CMake manual 声明 qt5_use_modules 宏已弃用:

此宏已过时。改为使用带有 IMPORTED 目标的 target_link_libraries。

...但是qt5_use_modules 不仅仅指定链接库:它指定包含目录、必要的编译标志等等(请参阅上面链接文档中的完整描述)。

那么,假设变量 QTMODULES 包含一些应该用于项目的 Qt 模块列表,那么替换以下“已弃用”CMake 行的“推荐”方法是什么?

qt5_use_modules(${myProjectName} ${QTMODULES})

以下不起作用,主要是因为它没有添加任何 Qt 包含路径:

    target_link_libraries(${myProjectName} IMPORTED ${QTMODULES})

QTMODULES 变量是否需要手动迭代,以便可以为每个单独的模块名称调用 include_directories?这似乎是从qt5_use_modules 倒退的一大步,qt5_use_modules 简单且“有效”。我错过了什么吗?

【问题讨论】:

    标签: c++ qt cmake qt5


    【解决方案1】:

    关于使用 IMPORTED 目标的消息实际上是指 Qt5 的 CMake 模块为您提供的生成目标,而不是您应该在 target_link_libraries 宏上设置 IMPORTED 属性。例如,类似:

    target_link_libraries(${myProjectName} Qt5::Core Qt5::Widgets)
    

    将负责添加所有必要的包含路径、链接路径和库以使用 Qt5CoreQt5Widgets 模块。

    【讨论】:

    • 这似乎仍然需要将每个名称从包含我想使用的模块列表的变量中分离出来,并将Qt5:: 附加到每个变量中。有什么特别的原因比简单地使用qt5_use_modules更好吗?
    • 有趣的是,你可以让target_link_libraries添加包含路径等。
    • 根据列表的格式,您可以对其执行一些正则表达式,或者遍历列表以构建正确格式的新变量...
    • @TimZaman .....所以 CMake 弃用东西只是因为它们不是闪亮和新的,不管“新方式”是否更好?
    • qtN_use_modules() 有很多问题,其中最重要的是它是“全球性的”。将target_link_libraries() 与IMPORTED Qt:: 目标一起使用,您可以将每个目标与一组不同 的Qt 模块链接。此外,qtN_use_modules()only picked up modules in the Qt install dir,对于像 QtWebKit 这样可以安装在不同路径的外部模块来说是个问题。
    猜你喜欢
    • 2013-11-04
    • 2018-06-18
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多