【问题标题】:Use framework in static library在静态库中使用框架
【发布时间】:2018-07-31 00:46:32
【问题描述】:

我有一个作为 .a 文件生成的库(要静态链接)。因为我在 OSX 上,所以我想包含 Qt 框架(QtCore.framework)。那可能吗?我怎么能用 cmake 做呢?

我的尝试:

在 CMakeLists.txt 我有

FIND_LIBRARY(QTCORE_LIBRARY NAMES QtCore
             HINTS "${CMAKE_SOURCE_DIR}/osx/frameworks")

然后我打印变量 ${QTCORE_LIBRARY} 并给出正确的路径。

然后在 src/CMakeLists.txt (我的来源在哪里)我链接库 TARGET_LINK_LIBRARIES(libname $${QTCORE_LIBRARY})

但是当我启动编译时它会抱怨,因为它没有找到

致命错误:找不到“QtGlobal”文件

我已经检查并且 QtCore.framework 包含 QtGlobal 标头

编辑:如果有人遇到同样的问题,我找到了解决方案。 我需要在我的项目包含目录中添加“${QTCORE_LIBRARY}/Headers”

提前致谢和问候

【问题讨论】:

  • I have seen that target_link_libraries requires an executable - 错误。 target_link_libraries 也将一个库与(另一个)库链接。

标签: macos qt cmake frameworks dynamic-linking


【解决方案1】:

为什么不用Qt5提供的CMake“config.cmake”呢?
类似:

 # Qt Setting
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
 set(CMAKE_AUTORCC ON)
 find_package(Qt5  REQUIRED COMPONENTS Core Gui Widgets)
 ...
 target_link_libraries(libname Qt5::Core Qt5::Gui Qt5::Widgets)

CMake 可以找到并使用 [...] Qt5 库。 [...] 使用 Qt5 附带的“配置文件包”找到 Qt5 库

源代码:https://cmake.org/cmake/help/latest/manual/cmake-qt.7.html

为了使 find_package 成功,必须在 CMAKE_PREFIX_PATH 下找到 Qt 5,或者必须在 CMake 缓存中将 Qt5_DIR 设置为 Qt5WidgetsConfig.cmake 文件的位置。使用 CMake 最简单的方法是将 CMAKE_PREFIX_PATH 环境变量设置为 Qt 5 的安装前缀。

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

【讨论】:

  • 使用这个,cmake能找到头文件吗?现在我看到致命错误:找不到“QtSql/qtsqlglobal.h”文件,因为 qtsqlglobal.h 在标题下,而不是在 QtSql 下
  • 不,我已经下载了 Qt prebuilts,它们存储在自定义路径中。我如何告诉 cmake 如何找到它们?
  • 您的 Qt 预建目录是否包含任何“*Config.cmake”文件?
  • 是的,我现在看到的是Qt5CoreConfig.cmake,但是不知道怎么用
  • 只需将这个文件所在的路径添加到CMAKE_PREFIX_PATH(例如set(CMAKE_PREFIX_PATH "your path to qt" ${CMAKE_PREFIX_PATH})),然后你可以使用find_package(Qt5Core CONFIG REQUIRED),或者在cli中传递cmake -DCMAKE_PREFIX_PATH=<qt5corepath> ..。当心这种情况...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2013-03-24
  • 1970-01-01
相关资源
最近更新 更多