16 Stimmen

Wie findet man eine Bibliothek mit cmake?

Um eine ausführbare Datei mit einer Bibliothek zu verknüpfen, die sich an einem Standardspeicherort befindet, kann man in einer CmakeLists.txt-Datei Folgendes tun:

create_executable(generate_mesh generate_mesh.cpp)
target_link_libraries(generate_mesh OpenMeshCore)

Dies würde funktionieren, wenn die Bibliothek, gegen die gelinkt wird, in

/usr/local/lib/libOpenMeshCore.dylib

In diesem Fall befindet sich die Bibliothek jedoch unter

/usr/local/lib/OpenMesh/libOpenMeshCore.dylib

Wie kann ich angeben, dass target_link_libraries sollte wirklich gegen eine Bibliothek in einem Sib-Verzeichnis platziert verknüpfen? Ich frage mich, ob es eine nützliche Option für target_link_libraries gibt, die angibt, dass sich die Bibliothek in einem Unterverzeichnis an einem Standardort befindet, z.B.

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore)

Wenn das nicht möglich ist, gibt es eine Möglichkeit, find_library für die Suche zu verwenden /usr/local/lib rekursiv, einschließlich ihrer Unterverzeichnisse, für die angegebene Bibliotheksdatei?

24voto

Rudi Punkte 18403

Sie können verschiedene Verzeichnisse hinzufügen zu find_library . Um diese Bibliothek zu verwenden, rufen Sie cmake mit cmake -DFOO_PREFIX=/some/path ... .

find_library( CPPUNIT_LIBRARY_DEBUG NAMES cppunit cppunit_dll cppunitd cppunitd_dll
            PATHS   ${FOO_PREFIX}/lib
                    /usr/lib
                    /usr/lib64
                    /usr/local/lib
                    /usr/local/lib64
            PATH_SUFFIXES debug )

find_library( CPPUNIT_LIBRARY_RELEASE NAMES cppunit cppunit_dll
            PATHS   ${FOO_PREFIX}/lib
                    /usr/lib
                    /usr/lib64
                    /usr/local/lib
                    /usr/local/lib64
            PATH_SUFFIXES release )

if(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)
    set(CPPUNIT_LIBRARY_RELEASE ${CPPUNIT_LIBRARY_DEBUG})
endif(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)

set( CPPUNIT_LIBRARY debug     ${CPPUNIT_LIBRARY_DEBUG}
                    optimized ${CPPUNIT_LIBRARY_RELEASE} )

# ...
target_link_libraries(foo ${CPPUNIT_LIBRARY})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X