我正在为 qt 应用程序准备 cmake 构建。 我使用以下结构的地方..
libMyApp 其中使用
SET(QT5_MODULES Widgets PrintSupport Network XmlPatterns)
FIND_PACKAGE(Qt5 REQUIRED COMPONENTS ${QT5_MODULES})
和
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 和 XMLBpatterns 模块描述相同场景的任何示例程序
函数TARGET_LINK_LIBRARIES()
中条目的顺序很重要。没有依赖关系的库应该最后提到,通常是一些标准库或外部库,在本例中是Qt5 Libs。
举个例子:
- 应用取决于
Lib_A
取决于Lib_B
和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
)