Unix 如何在shell之外使用$PATH?

Unix 如何在shell之外使用$PATH?,unix,path,cmake,linker,Unix,Path,Cmake,Linker,最近有人问我,为什么在我们的Mac环境中,$PATH变量中不包含特定的库(Accelerate)。我对此的回应是,$PATH是一个shell概念,而不是操作系统概念。我不希望库包含在$PATH中,因为它们不是可执行的,也不一定与shell相关 然而,这是真的吗?一些谷歌用户说是的,但在这种情况下,像CMake这样的工具如何使用find_-package和find_-lapack自动查找库呢?是否存在特定于系统的路径变量或其他类似概念?是的,路径环境变量用于存储可执行文件的路径。据我所知(互联网搜

最近有人问我,为什么在我们的Mac环境中,$PATH变量中不包含特定的库(Accelerate)。我对此的回应是,$PATH是一个shell概念,而不是操作系统概念。我不希望库包含在$PATH中,因为它们不是可执行的,也不一定与shell相关


然而,这是真的吗?一些谷歌用户说是的,但在这种情况下,像CMake这样的工具如何使用
find_-package
find_-lapack
自动查找库呢?是否存在特定于系统的路径变量或其他类似概念?

是的,
路径
环境变量用于存储可执行文件的路径。据我所知(互联网搜索也没有发现)图书馆位置没有标准的
路径

CMake
这样的工具通常会搜索标准位置。对于Unix风格的操作系统,它们通常包括
/usr/lib
/usr/local/lib
等。例如,请参见
CMake
如何定义它们:

将搜索这些标准位置(除非您告诉它不要),和/或用户给定的任何路径


将搜索
Config
Find
-模块,该模块负责查找所有必要的包组件(二进制文件、包括文件夹等),并使包准备好在CMake中使用。由于这些都是为特定的软件包编写的,它们通常会采用一些合格的“猜测工作”,以确定在哪里可以找到软件包及其组件(搜索标准位置、典型安装位置和/或任何其他任意方法来完成其任务)。因此,在这种情况下,找到包的不是
CMake
本身。

是的,
PATH
环境变量用于存储可执行文件的路径。据我所知(互联网搜索也没有发现)图书馆位置没有标准的
路径

CMake
这样的工具通常会搜索标准位置。对于Unix风格的操作系统,它们通常包括
/usr/lib
/usr/local/lib
等。例如,请参见
CMake
如何定义它们:

将搜索这些标准位置(除非您告诉它不要),和/或用户给定的任何路径


将搜索
Config
Find
-模块,该模块负责查找所有必要的包组件(二进制文件、包括文件夹等),并使包准备好在CMake中使用。由于这些都是为特定的软件包编写的,它们通常会采用一些合格的“猜测工作”,以确定在哪里可以找到软件包及其组件(搜索标准位置、典型安装位置和/或任何其他任意方法来完成其任务)。因此,在这种情况下,找到包的不是
CMake
本身。

AFAIK,Windows确实在
%PATH%
上的目录中查找DLL。Unix系统倾向于在路径类变量中查找库,这些变量的名称包括
DYLD\u LIBRARY\u path
(Mac OS X;macOS,某种程度上,带有警告),
LD\u LIBRARY\u path
(Linux,Solaris),
SHLIB\u path
(较旧的HP-UX,较新的版本也使用
LD\u LIBRARY\u path
,IIRC)和
LIBPATH
(古老的AIX;当前版本也使用
LD_LIBRARY_PATH
)。一些系统在运行时为加载库的位置提供了
LD_RUN_PATH
,使用
LD_LIBRARY_PATH
来引导链接器(并作为备用)。毫无疑问,我遗漏了一些细节。$PATH是一个shell概念,而不是操作系统概念。PATH是
exec
函数族中所需的环境变量。在shell中操作它的方式尚未定义,但此变量必须在每个进程的环境中。好的,Windows确实在
%PAT上的目录中查找DLLH%
。Unix系统倾向于在路径类变量中查找库,这些变量的名称包括
DYLD\u LIBRARY\u path
(Mac OS X;macOS,有一些警告),
LD\u LIBRARY\u path
(Linux,Solaris),
SHLIB\u path
(较旧的HP-UX,较新的版本也使用
LD\u LIBRARY\u path
,IIRC)和
LIBPATH
(古老的AIX;当前版本也使用
LD_LIBRARY_PATH
)。一些系统在运行时为加载库的位置提供了
LD_RUN_PATH
,使用
LD_LIBRARY_PATH
来引导链接器(并作为备用)。毫无疑问,我遗漏了一些细节。$PATH是一个shell概念,而不是OS概念。PATH是
exec
函数族中所需的环境变量。未定义在shell中操作它的方式,但此变量必须在每个进程的环境中。