问题 用什么而不是`qt5_use_modules`?


Qt 5 CMake手册 声明说 qt5_use_modules 不推荐使用宏:

这个宏已经过时了。请将target_link_libraries与IMPORTED目标一起使用。

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

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

qt5_use_modules(${myProjectName} ${QTMODULES})

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

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

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


6847
2017-07-01 21:38


起源



答案:


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

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

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


13
2017-07-01 22:36



这似乎仍然需要从包含我想要使用和附加的模块列表的变量中分离出每个名称 Qt5:: 每个人。是否有任何特殊原因可以简单地使用它 qt5_use_modules? - Kyle Strand
那 是 但有趣的是,你可以得到 target_link_libraries 添加包含路径等 - Kyle Strand
根据列表的格式,您可以对其执行一些正则表达式,或者遍历列表以正确的格式构建新变量... - Zrax
对,我对自己很有信心 可以 这样做,但与使用相比有什么优势 qt5_use_modules,哪个已经为我做了? - Kyle Strand
@TimZaman .....所以CMake弃用东西只是因为它们没有闪亮和新的,无论“新方式”是否更好? - Kyle Strand


答案:


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

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

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


13
2017-07-01 22:36



这似乎仍然需要从包含我想要使用和附加的模块列表的变量中分离出每个名称 Qt5:: 每个人。是否有任何特殊原因可以简单地使用它 qt5_use_modules? - Kyle Strand
那 是 但有趣的是,你可以得到 target_link_libraries 添加包含路径等 - Kyle Strand
根据列表的格式,您可以对其执行一些正则表达式,或者遍历列表以正确的格式构建新变量... - Zrax
对,我对自己很有信心 可以 这样做,但与使用相比有什么优势 qt5_use_modules,哪个已经为我做了? - Kyle Strand
@TimZaman .....所以CMake弃用东西只是因为它们没有闪亮和新的,无论“新方式”是否更好? - Kyle Strand