CMake的find_library是否搜索LD_LIBRARY_PATH?

时间:2017-01-10 10:12:30

标签: cmake

尽管阅读了文档,但我无法弄清楚CMake的命令find_library是否搜索LD_LIBRARY_PATH中列出的目录。

我的测试结果好坏参半。

2 个答案:

答案 0 :(得分:2)

从文档中(我没有复制与cmake变量相关的文本,也没有复制find_library的参数,这些都与此无关):

  

如果指定了NO_DEFAULT_PATH,则不会向搜索添加其他路径。如果未指定NO_DEFAULT_PATH,则搜索过程如下:

     

...

     
      
  1. 搜索标准系统环境变量。如果NO_SYSTEM_ENVIRONMENT_PATH是参数,则可以跳过此操作。      
        
    • LIB中的目录。在Windows主机上:<prefix>/lib/<arch>如果设置为CMAKE_LIBRARY_ARCHITECTURE<prefix>/lib设置为<prefix>/[s]binPATH设置为<entry>/lib PATH 1}},以及PATH本身的目录。
    •   
  2.         

    ...

LD_LIBRARY_PATH未使用find_library。这已通过阅读source code确认。

您的测试的混合结果可能来自另一个变量,但如果没有这些测试的详细描述,这只是猜测。

答案 1 :(得分:1)

根据当前的文档和一个小测试,似乎不考虑LD_LIBRARY_PATH

find_library的文档说

  

如果指定了NO_DEFAULT_PATH,则不会添加其他路径   搜索。如果未指定NO_DEFAULT_PATH,则搜索   过程如下:

     
      
  1. 搜索特定于cmake的缓存变量中指定的路径。这些   旨在使用-DVAR=value在命令行上使用。   如果传递NO_CMAKE_PATH,则可以跳过此操作。      
        
    • <prefix>/lib/<arch>如果设置了CMAKE_LIBRARY_ARCHITECTURE,   以及<prefix>/lib
    • 中的每个<prefix> CMAKE_PREFIX_PATH   
    • CMAKE_LIBRARY_PATH
    •   
    • CMAKE_FRAMEWORK_PATH
    •   
  2.   
  3. 搜索特定于cmake的环境变量中指定的路径。   这些旨在在用户的shell配置中设置。   如果传递NO_CMAKE_ENVIRONMENT_PATH,则可以跳过此操作。      
        
    • <prefix>/lib/<arch>如果设置了CMAKE_LIBRARY_ARCHITECTURE,   以及<prefix>/lib
    • 中的每个<prefix> CMAKE_PREFIX_PATH   
    • CMAKE_LIBRARY_PATH
    •   
    • CMAKE_FRAMEWORK_PATH
    •   
  4.   
  5. 搜索HINTS选项指定的路径。这些应该是   由系统内省计算的路径,例如由提供的提示   已找到的另一个项目的位置。硬编码的猜测   应使用PATHS选项指定。
  6.   
  7. 搜索标准系统环境变量。这可以   如果NO_SYSTEM_ENVIRONMENT_PATH是参数,则跳过。      
        
    • LIB中的目录,<prefix>/lib/<arch> if   已设置CMAKE_LIBRARY_ARCHITECTURE<prefix>/lib为。{1}}   <prefix>/[s]bin中的每个PATH和其他<entry>/lib   PATH中的条目以及PATH本身中的目录。
    •   
  8.   
  9. 搜索平台文件中定义的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
    •   
  10.   
  11. 搜索PATHS选项或指定的路径   命令的简写版本。这些通常是硬编码的   猜测。
  12.   

由于CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH被指定为空(默认情况下),因此问题等同于以下内容:CMAKE_SYSTEM_PREFIX_PATH或{{3}是否考虑了LD_LIBRARY_PATH }}。根据我使用 CMake 3.7.1 进行的简单测试,LD_LIBRARY_PATH不被他们考虑。