2017-01-10 3 views

Antwort

1

Aus der Dokumentation (ich den Text nicht wiedergegeben hat bezogenen Variablen noch Parameter find_library, cmake, die hier nicht relevant sind):

Wenn NO_DEFAULT_PATH angegeben ist, keine zusätzlichen Wege zu den hinzugefügt Suche. Wenn NO_DEFAULT_PATH nicht angegeben wird, ist der Suchprozess wie folgt:

...

  1. die Standard-Systemumgebungsvariablen suchen. Dies kann übersprungen werden, wenn NO_SYSTEM_ENVIRONMENT_PATH ein Argument ist.
    • Verzeichnisse in LIB. Auf Windows-Hosts: <prefix>/lib/<arch> wenn CMAKE_LIBRARY_ARCHITECTURE gesetzt und <prefix>/lib für jeden <prefix>/[s]bin in PATH und <entry>/lib für andere Einträge in PATH, und die Verzeichnisse in PATH selbst.

...

So wird LD_LIBRARY_PATH nicht von find_library verwendet. Dies wird bestätigt durch Lesen der source code.

Die gemischten Ergebnisse Ihrer Tests können von einer anderen Variablen stammen, aber ohne eine detaillierte Beschreibung dieser Tests ist dies nur eine Vermutung.

1

Laut der aktuellen Dokumentation und einem kleinen Test scheint es, dass LD_LIBRARY_PATH nicht berücksichtigt wird.


Die Dokumentation für find_library sagt

Wenn NO_DEFAULT_PATH angegeben ist, keine zusätzlichen Wege zur Suche hinzugefügt werden. Wenn NO_DEFAULT_PATH nicht angegeben ist, ist die Suche Prozess wie folgt:

  1. Suchpfade in Cmake spezifischen Cache Variablen angegeben. Diese sind für die Verwendung in der Befehlszeile mit einem -DVAR=value vorgesehen. Dies kann übersprungen werden, wenn NO_CMAKE_PATH übergeben wird.
    • <prefix>/lib/<arch> wenn CMAKE_LIBRARY_ARCHITECTURE gesetzt, und <prefix>/lib für jede <prefix> in CMAKE_PREFIX_PATH
    • CMAKE_LIBRARY_PATH
    • CMAKE_FRAMEWORK_PATH
  2. Suchpfade angegeben in Cmake spezifischen Umgebungsvariablen. Diese Einstellungen werden in der Shell-Konfiguration des Benutzers festgelegt. Dies kann übersprungen werden, wenn NO_CMAKE_ENVIRONMENT_PATH übergeben wird.
    • <prefix>/lib/<arch> wenn CMAKE_LIBRARY_ARCHITECTURE gesetzt, und <prefix>/lib für jede <prefix> in CMAKE_PREFIX_PATH
    • CMAKE_LIBRARY_PATH
    • CMAKE_FRAMEWORK_PATH
  3. die Pfade durch die HINTS Option angegeben suchen. Diese sollten Pfade sein, die durch Systemintrospektion berechnet wurden, wie z. B. ein Hinweis, der von dem Speicherort eines anderen bereits gefundenen Elements bereitgestellt wird. Hartcodierte Vermutungen sollten mit der Option PATHS angegeben werden.
  4. Durchsuchen Sie die Standardsystemumgebungsvariablen. Dies kann übersprungen werden, wenn NO_SYSTEM_ENVIRONMENT_PATH ein Argument ist.
    • Verzeichnisse in LIB, <prefix>/lib/<arch> wenn CMAKE_LIBRARY_ARCHITECTURE gesetzt und <prefix>/lib für jeden <prefix>/[s]bin in PATH und <entry>/lib für andere Einträge in PATH, und die Verzeichnisse in PATH selbst.
  5. Durchsuchen Sie Cmake-Variablen, die in den Platform-Dateien für das aktuelle System definiert sind. Dies kann übersprungen werden, wenn NO_CMAKE_SYSTEM_PATH übergeben wird.
    • <prefix>/lib/<arch> wenn CMAKE_LIBRARY_ARCHITECTURE gesetzt, und <prefix>/lib für jede <prefix> in CMAKE_SYSTEM_PREFIX_PATH
    • CMAKE_SYSTEM_LIBRARY_PATH
    • CMAKE_SYSTEM_FRAMEWORK_PATH
  6. Suche der angegebenen Pfade durch die PATHS Option oder in der Kurz Hand-Version des Befehls. Diese sind typischerweise fest codierte Vermutungen.

Da CMAKE_PREFIX_PATH und CMAKE_LIBRARY_PATH angegeben leer sein (Standardeinstellung), ist die Frage, entspricht der folgenden: Ist LD_LIBRARY_PATH betrachtet von CMAKE_SYSTEM_PREFIX_PATH oder CMAKE_SYSTEM_LIBRARY_PATH. Nach einem einfachen Test habe ich mit CMake 3.7 gemacht.1, LD_LIBRARY_PATH wird von ihnen nicht berücksichtigt.

Verwandte Themen