【发布时间】:2016-10-17 22:27:09
【问题描述】:
我有一个项目被配置为:
CMake 项目
- 静态库 A src(取决于 B)
- 静态库 B src(取决于 Qt)
- App src(与 LibA 静态链接)
每个文件夹都有自己的 CMakeLists.txt,但都是同一个 CMake 项目的一部分。一切正常。
然后为了更方便的将库源和app源分离到不同的源代码库,我开始学习CMake包的创建和在LibA上执行find_package。我重新安排了一些事情,现在这些库是他们自己的 CMake 项目,这需要我运行“cmake --build .--target install”来将包放在一个公共区域(而不是在构建文件夹中)。
该应用程序同样成为了自己的 CMake 包,我认为我只需要 find_package(LibA)。事实证明,我还需要在 LibB 上找到_package,因为应用程序需要一个标头。但出乎意料的是,App 需要像 LibB 一样在 Qt5Widgets、Qt5Core 和 Qt5Gui 上查找包。这是我不太明白的部分。当一切都是一个巨大的项目时,应用程序的 CMakeLists.txt 只需要链接到 LibA。所有其他的东西都是在我不知情的情况下处理好的吗?我是否天真地认为在 LibA 和 LibB 上执行 find_package 会以某种方式导致 Qt 库也链接到应用程序?
这可能是一个糟糕的问题,因为我的事情又开始了。我只是想确保我理解其中的原因。
【问题讨论】: