我正在为 qt 应用程序准备 cmake 构建。我在哪里使用以下结构..
libMyApp
它使用
SET(QT5_MODULES Widgets PrintSupport Network XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
and
TARGET_LINK_LIBRARIES(
${TARGET_NAME}
Qt5::Widgets
Qt5::PrintSupport
Qt5::Network
Qt5::XmlPatterns
)
libMyApp构建成功并生成libMyApp.a(静态库)
现在我在我的应用程序 MyApp 中使用这个库
它使用
SET(QT5_MODULES Widgets PrintSupport XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
TARGET_LINK_LIBRARIES(
${TARGET_NAME}
Qt5::Widgets
Qt5::PrintSupport
Qt5::XmlPatterns
${CODE_LIB_FILES}
)
${CODE_LIB_FILES} 是 libMyApp.a 的保存路径列表
MyApp 构建成功,最后显示链接错误
undefined reference to `QPrinter::QPrinter(QPrinter::PrinterMode)
xml 也发生同样的事情
undefined reference to `QDomNode::isElement() const'
谁能指出这里出了什么问题吗?
或使用 printsupport 和 xmlpatterns 模块描述相同场景的任何示例程序
函数中条目的顺序TARGET_LINK_LIBRARIES()
很重要。最后要提到的是没有依赖关系的库,通常是一些标准库或外部库,在本例中是 Qt5 Libs。
一个例子:
- 应用取决于
-
Lib_A
依赖于取决于Lib_B
and Lib_std
-
Lib_B
依赖于取决于Lib_std
-
Lib_std
没有依赖关系
那么该函数的调用应如下所示:
TARGET_LINK_LIBRARIES(
${TARGET_NAME} # Name of the app
"Lib_A"
"Lib_B"
"Lib_std" # Last entries: Std Libs, external Libs, ...
)
在这个应用程序中我假设${CODE_LIB_FILES}=libMyApp.a
对 Qt5-Libs 有一些依赖性,因此将此条目移至 Qt5-Libs 上方是合理的。
SET(QT5_MODULES Widgets PrintSupport XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
TARGET_LINK_LIBRARIES(
${TARGET_NAME}
${CODE_LIB_FILES} # <<< Moved this entry up
Qt5::Widgets
Qt5::PrintSupport
Qt5::XmlPatterns
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)