2017-01-10 51 views

回答

1

從文檔(我沒有複製相關文本CMake的變量也沒有find_library參數,這是不是與此有關):

如果NO_DEFAULT_PATH指定,則沒有其他路徑添加到搜索。如果未指定NO_DEFAULT_PATH,則搜索過程如下:

...

  • 搜索標準的系統環境變量。如果NO_SYSTEM_ENVIRONMENT_PATH是一個參數,這可以跳過。
    • 目錄在LIB。在Windows主機上:<prefix>/lib/<arch>如果CMAKE_LIBRARY_ARCHITECTURE設置,並<prefix>/libPATH每個<prefix>/[s]bin<entry>/lib其他條目PATH,並且在PATH本身的目錄。
  • ...

    所以LD_LIBRARY_PATH不使用find_library。這是確認閱讀source code

    您的測試的混合結果可能來自其他變量,但沒有這些測試的詳細描述,這只是一個猜測。

    1

    根據目前的文檔和一個小測試,似乎LD_LIBRARY_PATH不考慮。


    find_library文檔說

    如果指定NO_DEFAULT_PATH,則沒有附加的路徑添加到 搜索。如果沒有指定NO_DEFAULT_PATH時,搜索 過程如下:在特定的CMake緩存變量指定

    1. 搜索路徑。這些 旨在用於帶有-DVAR=value的命令行。 如果通過NO_CMAKE_PATH,則可以跳過該步驟。
      • <prefix>/lib/<arch>如果CMAKE_LIBRARY_ARCHITECTURE被設置, 和<prefix>/lib每個<prefix>CMAKE_PREFIX_PATH
      • CMAKE_LIBRARY_PATH
      • CMAKE_FRAMEWORK_PATH在特定的cmake-環境變量指定
    2. 搜索路徑。 這些旨在在用戶的shell配置中設置。 如果通過NO_CMAKE_ENVIRONMENT_PATH,則可以跳過該步驟。
      • <prefix>/lib/<arch>如果CMAKE_LIBRARY_ARCHITECTURECMAKE_PREFIX_PATH
      • CMAKE_LIBRARY_PATH
      • CMAKE_FRAMEWORK_PATH
    3. 搜索由HINTS選項指定的路徑上設置的,並 <prefix>/lib每個<prefix>。這些應該是 由系統內省計算的路徑,例如 提供的提示已找到另一個項目的位置。應使用PATHS選項指定硬編碼猜測 。
    4. 搜索標準系統環境變量。如果NO_SYSTEM_ENVIRONMENT_PATH是參數,則可跳過 。
      • 目錄中LIB<prefix>/lib/<arch>如果 CMAKE_LIBRARY_ARCHITECTURE設置,並在PATH<prefix>/lib爲 每個<prefix>/[s]bin,並在PATH<entry>/lib其他 條目,並在PATH本身的目錄。
    5. 搜索 當前系統的Platform文件中定義的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
    6. 搜索由PATHS選項或在 速記版本中指定的路徑的命令。這些通常是硬編碼的 猜測。

    由於CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH和被指定爲空(默認),問題是等效於以下:是由LD_LIBRARY_PATHCMAKE_SYSTEM_PREFIX_PATH考慮CMAKE_SYSTEM_LIBRARY_PATH。根據我用CMake 3.7所做的簡單測試。1LD_LIBRARY_PATH不被他們考慮。

    相關問題