【问题标题】:CMake with Qt to include modules xmlpatternsCMake 与 Qt 包含模块 xmlpatterns
【发布时间】:2016-01-15 07:41:31
【问题描述】:

我正在尝试从 QMake 切换到 CMake。我的第一个错误是这样的:

Target "aacmakeqt" links to target "Qt::xmlpatterns" but the target was not found.
Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing?

我想知道如何知道或找到模块的名称?为什么是find_package(Qt5Widgets) 而不是find_package(Qt5widgets)? 为什么是target_link_libraries(project Qt5::Widgets) 而不是Qt5::widgetsQt5Widgets?我在哪里可以找到这些信息?而最重要的是如何使用链接Qt XML Patterns

我在 QtCreator 中的 .pro 文件

#-------------------------------------------------
#
# Project created by QtCreator 2015-11-07T19:23:43
#
#-------------------------------------------------   
QT       += core gui xmlpatterns widgets

TARGET = myapp
TEMPLATE = app

SOURCES += main.cpp ......... 
HEADERS  += mainwindow.h ........
FORMS    += mainwindow.ui ........
RESOURCES += resources.qrc

我的 CMakeList 文件

cmake_minimum_required(VERSION 3.0)

## Setting ProjectId by current directory
get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME)
string(REPLACE " " "_" ProjectId ${ProjectId})
MESSAGE(STATUS "\tProjectId: " ${ProjectId} ) ## Debug Message

## Defining project
project(${ProjectId})
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Find the library
find_package(Qt5Widgets)
find_package(Qt5Xmlpatterns)

MESSAGE(STATUS "Project Source Directory: " ${PROJECT_SOURCE_DIR} ) ## Debug Message

file(GLOB_RECURSE SRC_CPP ${PROJECT_SOURCE_DIR} *.cpp)
MESSAGE(STATUS "\tsource: " ${SRC_CPP}) ## Debug Message
add_executable(${ProjectId} ${SRC_CPP})

# Use the Widgets module from Qt 5.
target_link_libraries(${ProjectId} Qt5::Widgets)
target_link_libraries(${ProjectId} Qt5::xmlpatterns)

解决方案:

通过find_package(Qt5XmlPatterns REQUIRED) 提供的更详细的错误消息,我了解到 CMake 找不到 Qt5XmlPatternsConfig.cmakeqt5xmlpatterns-config.cmake

所需的.cmake 文件应该随Qt 一起提供。事实证明,我的 Qt 目录位于我的主目录中,而不是 \usr\lib。 (我不知道这是怎么发生的。我应该使用默认选项安装 Qt。)

所以,我只是帮助 cmake 找到正确的目录。就我而言,Qt 的所有.cmake 文件都位于~/Qt5.5.1/5.5/gcc_64/lib/cmake 下。 根据find_package的文档,依次搜索CMAKE_PREFIX_PATHCMAKE_FRAMEWORK_PATHCMAKE_APPBUNDLE_PATH包。所以我只是添加

set(CMAKE_FRAMEWORK_PATH ${CMAKE_FRAMEWORK_PATH} "~/Qt5.5.1/5.5/gcc_64/lib/cmake")

让它正确搜索。

最后我们可以在Your_Qt_Install_directory/Qt5.5.1/5.5/gcc_64/lib/cmake"下找到包名。

【问题讨论】:

  • 你可以试试XmlPatterns而不是xmlpatterns(注意大小写)?在这种情况下,我怀疑它最像 Qt 遵循 CMake 大小写约定。
  • 我确实尝试了各种大小写组合XmlpatternsXmlPatterns....
  • CMake 运行的输出是什么?我假设它没有找到 Qt5Xmlpattern。我以为你必须寻找`find_packages(Qt5 COMPONENTS Core Gui Widgets XmlPatterns)`或类似的。
  • 对于doc.qt.io/qt-5/cmake-manual.html 中未提及的内容,我认为最好的办法是阅读 FindQt* 脚本的源代码。
  • @FrankOsterfeld 对。网上关于 Qt5 和 CMake 的例子并不多。

标签: qt cmake


【解决方案1】:

使用

find_package(Qt5XmlPatterns REQUIRED)

然后

target_link_libraries(name Qt5::XmlPatterns)

您在find_package 中也有错误的情况。 REQUIRED 抓住了这一点。

【讨论】:

  • 如果找不到包,REQUIRED 只会打印更详细的错误消息。在这里不是必须的。但是感谢您的评论,我明白了找不到包裹的原因。我会尽快把它放在我的问题中。
  • 是的。 REQUIRED 指出您的第一个错误,因为大小写不正确。即使对于可选依赖项,我也使用REQUIRED,并且只在推送之前将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2012-09-12
  • 2010-11-22
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
相关资源
最近更新 更多