ich einige Hilfsfunktionen haben, die mir im Dateisystem geteilt und statischen Bibliotheken auffinden:CMAKE: Anrufe wiederholt funktionieren mit verschiedenen Argumenten die gleichen Ergebnisse geben
Ich habe eine Hilfsfunktion, die die eigentliche Suche durchführt, da ein name
und eine suffix
:
function(do_find_lib LIB_NAME SUFFIX OUT)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${SUFFIX})
find_library(FOUND ${LIB_NAME})
if(NOT FOUND)
message(SEND_ERROR "unable to find library ${LIB_NAME}")
endif()
message(STATUS "search: ${LIB_NAME}.${SUFFIX} result: ${FOUND}")
set(${OUT} ${FOUND} PARENT_SCOPE)
endfunction()
die Funktion find_static_lib
den entsprechenden Suffix setzt, und ruft do_find_lib
:
function(find_static_lib LIB_NAME OUT)
if (WIN32 OR MSVC)
set(SUFFIX ".lib")
elseif (UNIX)
set(SUFFIX ".a")
endif()
do_find_lib(${LIB_NAME} ${SUFFIX} FOUND)
message(STATUS "static lib search: ${LIB_NAME} result: ${FOUND}")
set(${OUT} ${FOUND} PARENT_SCOPE)
endfunction()
In ähnlicher Weise der Funktion find_shared_lib
das entsprechende Suffix setzt und fordert do_find_lib
:
function(find_shared_lib LIB_NAME OUT)
if (WIN32 OR MSVC)
set(SUFFIX ".dll")
elseif (UNIX)
set(SUFFIX ".so")
endif()
do_find_lib(${LIB_NAME} ${SUFFIX} FOUND)
message(STATUS "shared lib search: ${LIB_NAME} result: ${FOUND}")
set(${OUT} ${FOUND} PARENT_SCOPE)
endfunction()
Je nach Bedarf an anderer Stelle in meiner Cmake Hierarchie verwende ich diese Funktionen verschiedene Bibliotheken
Das erste Mal, dass ich verwenden finden es funktioniert:
Zuerst suche ich nach tcmalloc
statische Bibliothek.
find_shared_library(tcmalloc_minimal TCMALLOC)
Hier ist die resultierende Ausgabe:
-- search: tcmalloc_minimal.a result: /usr/local/lib/libtcmalloc_minimal.a
-- static lib search: tcmalloc_minimal result: /usr/local/lib/libtcmalloc_minimal.a
Das zweite Mal, dass ich es verwenden, es bricht:
Next I für protobuf
gemeinsam genutzte Bibliothek zu suchen.
find_shared_library(protobuf PROTOBUF)
Hier ist die resultierende Ausgabe:
-- search: protobuf.so result: /usr/local/lib/libtcmalloc_minimal.a
-- shared lib search: protobuf result: /usr/local/lib/libtcmalloc_minimal.a
Fehler:
Wah? Die Suche nach protobuf
mit Suffix .so
findet das vorherige Sucher, /usr/local/lib/libtcmalloc_minimal.a
Frage:
- Warum ist das passiert?
- Gibt es einen Fehler in meinen Funktionen?
- Was muss ich tun, um die erforderliche Bibliothek richtig zu suchen?
Hinweise:
ich abgeschlossen habe mein Build-Verzeichnis gelöscht und die Makefiles wieder aufbauen, so glaube nicht, dass dies ein Problem mit einem Cache.
Ich bin nicht sicher, dass Ihre Frage als besser formuliert ist, [dass man] (http://stackoverflow.com/questions/36757842/cmake-use-foreach- und-find-library-to-return-full-path-of-libraries /), wurde 14 Stunden vorher gefragt. Warum wird diese ähnliche Frage benötigt? – Tsyvarev