【问题标题】:CMAKE: Include files not found with OBJECTCMAKE:包含未使用 OBJECT 找到的文件
【发布时间】:2015-04-13 19:24:35
【问题描述】:

我现在有一个使用 Qt5 包含的工作 CMake 项目。 该项目的几个部分是使用编译的

add_library(myLib STATIC ${lib_src})

我现在正在尝试使用 OBJECT,所以我改为

add_library(myLib OBJECT ${lib_src})

但是,在编译时,我收到以下错误:

QObject,没有这样的文件或目录

谁能告诉我如何修复我的项目以使用 OBJECT?

附:额外细节: 该项目托管here: 生成可执行文件的主要 CMake 位于 app folder

baloowrap lib 在 digikamgui 中被链接,然后 digikamgui 被链接到 digikam 可执行文件和@987654325我要创建的 @ 位于 utilities/baloo 中,其中包含以下内容:

set(baloowrap_SRCS baloowrap.cpp)
add_library(baloowrap STATIC ${baloowrap_SRCS})
target_link_libraries(baloowrap KF5::FileMetaData KF5::I18n)

【问题讨论】:

  • 您的 CMakeLists.txt 中是否包含“find_package(Qt5Core REQUIRED)”?
  • 是的,使用 STATIC 一切正常。
  • 能否请您出示您的 CMakeLists.txt 文件?
  • 请在主帖中查找更多详细信息
  • 我不确定。也许你需要链接 Qt5::Core: target_link_libraries(baloowrap Qt5::Core KF5::FileMetaData KF5::I18n)

标签: c++ qt cmake


【解决方案1】:

在我的特殊情况下,当我使用 target_link_libraries(Qt5::Core) 时,CMake 会自动生成包含目录。

当您使用 OBJECT 时,您无法链接任何内容,并且来源无法找到相关的包含...

http://doc.qt.io/qt-5/cmake-manual.html

你可以通过添加来解决QObject问题:

include_directories(${Qt5Widgets_INCLUDE_DIRS})

【讨论】:

  • 您应该使用“find_package(Qt5Widgets REQUIRED)”得到相同的结果
  • 正如您在 CMakeFiles 中看到的,在* CMakeFiles.txt 中进行了类似的调用
  • 嗯。这么奇怪。在我的项目中,我不需要包含这两行,只需 find_package。无论如何,我认为你应该把你的答案作为正确的答案。
  • 我在编写 python 绑定时遇到了同样的问题。在这种情况下,我使用的是add_library(MyPythonModule MODULE module.cpp),但它找不到 标头。但是,包装的库本身被声明为add_library(MyLibrary SHARED library.cpp),并且能够毫无问题地找到 。奇怪的。无论如何,明确添加 include_directories(${Qt5Core_INCLUDE_DIRS}) 也解决了我的问题,尽管 Qt 文档说它不应该是必要的。