尽管阅读了文档,但我无法弄清楚CMake的命令find_library
是否搜索LD_LIBRARY_PATH
中列出的目录。
我的测试结果好坏参半。
答案 0 :(得分:2)
从文档中(我没有复制与cmake变量相关的文本,也没有复制find_library
的参数,这些都与此无关):
如果指定了
NO_DEFAULT_PATH
,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH
,则搜索过程如下:...
- 搜索标准系统环境变量。如果
醇>NO_SYSTEM_ENVIRONMENT_PATH
是参数,则可以跳过此操作。
LIB
中的目录。在Windows主机上:<prefix>/lib/<arch>
如果设置为CMAKE_LIBRARY_ARCHITECTURE
,<prefix>/lib
设置为<prefix>/[s]bin
,PATH
设置为<entry>/lib
PATH
1}},以及PATH
本身的目录。...
LD_LIBRARY_PATH
未使用find_library
。这已通过阅读source code确认。
您的测试的混合结果可能来自另一个变量,但如果没有这些测试的详细描述,这只是猜测。
答案 1 :(得分:1)
根据当前的文档和一个小测试,似乎不考虑LD_LIBRARY_PATH
。
find_library
的文档说
如果指定了
NO_DEFAULT_PATH
,则不会添加其他路径 搜索。如果未指定NO_DEFAULT_PATH
,则搜索 过程如下:
- 搜索特定于cmake的缓存变量中指定的路径。这些 旨在使用
-DVAR=value
在命令行上使用。 如果传递NO_CMAKE_PATH
,则可以跳过此操作。
- 中的每个
<prefix>/lib/<arch>
如果设置了CMAKE_LIBRARY_ARCHITECTURE, 以及<prefix>/lib
<prefix>
CMAKE_PREFIX_PATH
CMAKE_LIBRARY_PATH
CMAKE_FRAMEWORK_PATH
- 搜索特定于cmake的环境变量中指定的路径。 这些旨在在用户的shell配置中设置。 如果传递
NO_CMAKE_ENVIRONMENT_PATH
,则可以跳过此操作。
- 中的每个
<prefix>/lib/<arch>
如果设置了CMAKE_LIBRARY_ARCHITECTURE
, 以及<prefix>/lib
<prefix>
CMAKE_PREFIX_PATH
CMAKE_LIBRARY_PATH
CMAKE_FRAMEWORK_PATH
- 搜索
HINTS
选项指定的路径。这些应该是 由系统内省计算的路径,例如由提供的提示 已找到的另一个项目的位置。硬编码的猜测 应使用PATHS
选项指定。- 搜索标准系统环境变量。这可以 如果
NO_SYSTEM_ENVIRONMENT_PATH
是参数,则跳过。
LIB
中的目录,<prefix>/lib/<arch>
if 已设置CMAKE_LIBRARY_ARCHITECTURE
,<prefix>/lib
为。{1}}<prefix>/[s]bin
中的每个PATH
和其他<entry>/lib
PATH
中的条目以及PATH
本身中的目录。- 搜索平台文件中定义的cmake变量 现行制度。如果
NO_CMAKE_SYSTEM_PATH
,则可以跳过此操作 通过。
<prefix>/lib/<arch>
如果设置了CMAKE_LIBRARY_ARCHITECTURE
, 和<prefix>/lib
中的每个<prefix>
CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_LIBRARY_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
- 搜索
醇>PATHS
选项或指定的路径 命令的简写版本。这些通常是硬编码的 猜测。
由于CMAKE_PREFIX_PATH
和CMAKE_LIBRARY_PATH
被指定为空(默认情况下),因此问题等同于以下内容:CMAKE_SYSTEM_PREFIX_PATH
或{{3}是否考虑了LD_LIBRARY_PATH
}}。根据我使用 CMake 3.7.1 进行的简单测试,LD_LIBRARY_PATH
不被他们考虑。