2013-06-20 12 views
7

Ich habe über das Internet gesucht, aber ich konnte nichts finden, das meine Frage beantworten würde (oder ich weiß nicht, wonach ich suchen soll).So verwenden Sie externe DLLs in CMake-Projekt

Wie auch immer, hier ist mein Problem: Ich möchte 3rdParty-Bibliotheken (.dll-Dateien) in meinem CMake-Projekt verwenden. Bibliothek (https://github.com/pitzer/SiftGPU), die ich einbeziehen möchte, ist Open Source und ist auch in Binärdateien, die ich gerne verwenden würde und auch CMake als Build-Tool verwendet, wenn das relevant ist.

Ich hoffe, ich war klar genug.

Antwort

9

Bearbeiten Sie zuerst Ihre CMakeLists.txt, um Ihre Drittanbieterbibliothek einzuschließen. Sie benötigen zwei Dinge: den Pfad zu den Header-Dateien und die Bibliotheksdatei, zu der der Link führen soll. Zum Beispiel:

# searching for include directory 
find_path(SIFTGPU_INCLUDE_DIR siftgpu.h) 

# searching for library file 
find_library(SIFTGPU_LIBRARY siftgpu) 

if (SIFTGPU_INCLUDE_DIR AND SIFTGPU_LIBRARY) 
    # you may need that if further action in your CMakeLists.txt depends 
    # on detecting your library 
    set(SIFTGPU_FOUND TRUE) 

    # you may need that if you want to conditionally compile some parts 
    # of your code depending on library availability 
    add_definitions(-DHAVE_LIBSIFTGPU=1) 

    # those two, you really need 
    include_directories(${SIFTGPU_INCLUDE_DIR}) 
    set(YOUR_LIBRARIES ${YOUR_LIBRARIES} ${SIFTGPU_LIBRARY}) 
endif() 

Als Nächstes können Sie das gleiche für andere Bibliotheken tun, und wenn alle Bibliotheken gefunden werden, Link zum Ziel:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

Dann können Sie Ihr Projekt mit CMake konfigurieren, sondern als Es hat keine magische Möglichkeit, Ihre installierte Bibliothek zu finden, es wird nichts gefunden, aber es werden zwei Cache-Variablen erstellt: SIFTGPU_INCLUDE_DIR und SIFTGPU_LIBRARY.

Verwenden Sie die CMake GUI SIFTGPU_INCLUDE_DIR zeigt auf das Verzeichnis, in die Header-Dateien und SIFTGPU_LIBRARY auf die .lib Datei Ihrer Dritten Bibliothek zu haben.

Wiederholen Sie für jede Bibliothek von Drittanbietern, erneut konfigurieren und kompilieren.

+2

Wie teilt dies cmake, wo sich die .dll-Datei befindet? Ich sehe nur eine statische Verknüpfung zu einer Lib und einen Hinweis darauf, wo sich die Header-Datei befindet. – EbbnFlow

+3

Cmake muss nicht wissen, wo DLL-Dateien sind. Diese Dateien werden nur benötigt, wenn die Binärdatei nicht beim Kompilieren ausgeführt wird. – Guillaume

Verwandte Themen