我最近被问到为什么一个特定的库(加速)不包含在我们的Mac环境中的$PATH变量中。我对此的回应是,$PATH是一个shell概念,而不是操作系统概念。我不希望库包含在$PATH中,因为它们不是可执行的,也不一定与 shell 相关。
然而,这是真的吗?一些谷歌搜索说是的,但在这种情况下,像 CMake 这样的工具如何自动找到具有find_package
和find_lapack
的库?是否有一些特定于系统的 PATH 变量或其他类似概念?
是的,PATH
环境变量用于存储可执行文件的路径。据我所知(互联网搜索也没有显示),图书馆位置没有标准PATH
等效物。
像CMake
这样的工具通常会搜索标准位置。对于Unix风格的操作系统,这些通常包括/usr/lib
,/usr/local/lib
等。例如,请参阅CMake
如何定义它们:UnixPaths.cmake。
find_library()将搜索这些标准位置(除非您告诉它不要搜索)和/或用户提供的任何路径。
find_package() 将搜索一个Config
或Find
-模块,该模块负责查找所有必要的包组件(二进制文件、包含文件夹等),并使包准备好在 CMake 中使用。由于这些是为特定包编写的,因此它们通常会对在哪里找到包及其组件进行一些合格的"猜测工作"(搜索标准位置、典型安装位置和/或任何其他任意方法来完成其任务)。因此,在这种情况下,找到包的不是CMake
本身。