2013-06-20 13 views
7

Ho cercato su Internet ma non ho trovato nulla che potesse rispondere alla mia domanda (o non so cosa cercare).Come utilizzare DLL esterne nel progetto CMake

Comunque, ecco il mio problema: Voglio usare le librerie 3rdParty (file .dll) nel mio progetto CMake. La libreria (https://github.com/pitzer/SiftGPU) che voglio includere è open source ed è anche disponibile in binario che vorrei usare e usa anche CMake come strumento di compilazione se questo è rilevante.

Spero di essere stato abbastanza chiaro.

risposta

9

Innanzitutto, modifica il tuo CMakeLists.txt per includere la libreria di terze parti. Avrai bisogno di due cose: percorso dei file di intestazione e file di libreria a cui collegarti. Per esempio:

# 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() 

Successivamente, è possibile fare lo stesso per le altre biblioteche e quando vengono rilevati ogni librerie, collegamento al bersaglio:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

Poi si può configurare il progetto con CMake, ma come non ha alcun modo magico per trovare la tua libreria installata, non troverà nulla, ma creerà due variabili di cache: SIFTGPU_INCLUDE_DIR e SIFTGPU_LIBRARY.

Utilizzare la GUI di CMake per fare in modo che SIFTGPU_INCLUDE_DIR indichi la directory contenente i file di intestazione e SIFTGPU_LIBRARY nel file .lib della libreria di terze parti.

Ripetere l'operazione per ogni libreria di terze parti, configurarla di nuovo e compilare.

+2

In che modo si dice cmake dove risiede il file .dll? Vedo solo il collegamento statico a una libreria e un suggerimento su dove si trova il file di intestazione. – EbbnFlow

+3

Cmake non ha bisogno di sapere dove sono i file dll. Questi file sono necessari solo quando si esegue il file binario non durante la sua compilazione. – Guillaume

Problemi correlati