cmake find_package如何查找第三方依赖项

6jjcrrmo  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(128)

我已经阅读了find_package的文档,也阅读了mastering it的文档。然而,IMO,这两种方法对我来说都是低效的。它说它将在以下位置搜索,对于状态器来说,甚至没有定义<prefix>/是什么,所以我已经没有一个好的开始。
我已经安装了pybind11,它位于...\Python311\Lib\site-packages\pybind11\share\cmake\pybind11\pybind11Config中。所以我知道它的存在...但我怎么告诉CMake在那里找到它呢
在所有的教程中,人们只是有find_package(pybind11 REQUIRED),它只是找到它,但是当我打印message(" A MESSAGE ${CMAKE_PREFIX_PATH}")时,它是空的。它在哪里??如果我安装了第三方依赖项或安装了一些东西,它通常在程序文件中,而不是安装在CMake位置搜索定义的通常位置,所以我发现CMake如何找到任何东西很奇怪.?
我正在设置一个基本的CMakeLists.txt并安装了PyPi的pybind11,但是,当然我的find_package(pybind11 REQUIRED)找不到它,没有人能告诉我如何正确设置它,以便CMake可以使用find_package找到任何东西。

ddhy6vgd

ddhy6vgd1#

所以我知道它的存在...但我怎么告诉CMake在那里找到它呢
希望消费者使用CMake的包所有者有责任提供自己的CMake配置。这个CMake配置的职责是指定在哪里可以找到它们的包工件(库,源文件等)以及如何配置CMake来使用它(即,目标是什么,编译器设置等)。
理想情况下,这意味着包所有者提供CMake配置或处理此配置的CMake模块。
在所有的教程中,人们只需要find_package(pybind 11 REQUIRED),它就可以找到它,
是的,这意味着包所有者已经提供了他们的CMake配置文件,并将它们放在文件系统的标准位置。
然而,当我打印消息(“A MESSAGE ${CMAKE_PREFIX_PATH}”)时,它是空的.
是的,这是预期的结果。默认情况下,CMAKE_PREFIX_PATH是空的,它的职责是允许像你和我这样的用户提供安装外部库的自定义路径。
假设你有一个项目,它消耗了一堆外部库,你决定将它们安装在./external中。要让CMake拾取这些依赖项,您可以传递以下内容:

list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/external")

请参阅有关CMAKE_PREFIX_PATH的文档
它在哪里??
CMake文档提供了find_package搜索相关CMake配置文件的所有目录位置的完整列表:
https://cmake.org/cmake/help/latest/command/find_package.html#search-procedure
对于CMake Find模块,find_packages检查CMAKE_MODULE_PATH中列出的目录位置,默认情况下,该位置也是空的。
我正在设置一个基本的CMakeLists.txt,并安装了PyPi的pybind 11,但是,当然我的find_package(pybind 11 REQUIRED)找不到它,没有人能告诉我如何正确设置它,以便CMake可以使用find_package找到任何东西。
您需要对自己对find_package(pybind11 REQUIRED)的调用进行故障排除。如果你在非标准的目录路径中部署pybind 11,那么你有责任配置你的项目,以便能够找到它。

相关问题