将第三方Libs添加到我的CMAKE项目中

Adding third-party libs to my CMake Project

本文关键字:CMAKE 项目 我的 第三方 Libs 添加      更新时间:2023-10-16

我似乎无法将我的头缠绕在某些思想上,希望你们能帮助我更清楚地看到事情。据我了解,Find_package命令应该是将第三方依赖性导入我的项目中的所有必要的内容。

  1. 在我的项目层次结构的root cmakelists.txt中始终使用这些命令,该命令具有多个子文件夹,并添加了add_subDirectory。((?还是我应该在实际需要的子目录中使用find_package?

  2. 我没有得到find.cmake和config.cmake文件之间的区别。我相信config.cmake文件是图书馆作者正确导出lib的目标的结果。如果lib不提供cmake-sup-pupport,则cmake文件就像辅助措施一样,即不支持客户使用cmake。但是Cmake本身可能会提供合适的查找。要适当采用的CMAKE文件。正确的?那么,我什么时候必须安装和导出我的lib?

感谢您的帮助

编辑:

感谢您的Hep Thomas。作为具体的示例,我想将libqglviewer作为第三方库中的项目中。但是,Ubuntu下的包装管理器16.04仅提供取决于QT4的较旧版本。尽管如此,我的项目仍使用QT5,因此我想,我只下载了LIB并将其从源到/OPT构建,没有汗水。libqglviewer使用QMAKE,因此我转向Google并找到了一个findqglviewer.cmake文件。我将此文件复制到/USR/share/cmake-3.5/modules,据我所知,这应该渲染命令find_package(QGLViewer)以成功完成变量${QGLViewer_LIBRARIES}等。但是,它行不通,我无法弄清楚问题是什么,这可能是由于对这些事项的普遍缺乏理解

    CMake Warning at /usr/share/cmake 3.5/Modules/FindQGLViewer.cmake:108 (MESSAGE):
  Could not find libQGLViewer.so, failed to build?
  Call Stack (most recent call first):
  CMakeLists.txt:57 (_find_package)
  CMakeLists.txt:109 (find_package)

1。这取决于您的项目结构。如果您在添加任何子折叠器之前调用find_package(),则将确保包含所有子折叠器的软件包。如果您在一个子文件夹中调用find_package(),则该软件包仅在事实之后可用。

如果有可能有多个子文件夹取决于包裹,并且这些子折叠者中的至少一个始终是构建的一部分(即不是可选的(,那么要做的谨慎的事情就是在添加子文件夹之前,请在顶级调用find_package(),以确保其可用性向所有可能需要它的子折叠者提供,而无需考虑添加子折线的顺序。

2。您的理解在很大程度上是正确的。这是官方解释。是的,Cmake用许多Find -Modules船舶用于普通库,但是即使在普通库中,该列表也远远没有详尽。