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