2013-06-20 11 views
7

Szukałem w Internecie, ale nie mogłem znaleźć niczego, co mogłoby odpowiedzieć na moje pytanie (lub nie wiem, czego szukać).Jak korzystać z zewnętrznych bibliotek DLL w projekcie CMake

W każdym razie oto mój numer: Chcę używać bibliotek 3rdParty (pliki .dll) w moim projekcie CMake. Biblioteka (https://github.com/pitzer/SiftGPU), którą chcę dołączyć, jest open source i jest również dostępna w postaci binarnej, z której chciałbym korzystać, a także używa CMake jako narzędzia do kompilacji, jeśli jest to istotne.

Mam nadzieję, że byłem wystarczająco jasny.

Odpowiedz

9

Najpierw edytuj plik CMakeLists.txt, aby dołączyć bibliotekę strony trzeciej. Będziesz potrzebował dwóch rzeczy: ścieżki do plików nagłówkowych i pliku biblioteki do połączenia. Na przykład:

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

Dalej, można zrobić to samo dla innych bibliotek i po wykryciu co bibliotek, link do strony docelowej:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

Następnie można skonfigurować swój projekt z CMake, ale jako nie ma żadnego magicznego sposobu na znalezienie zainstalowanej biblioteki, nie znajdzie niczego, ale utworzy dwie zmienne pamięci podręcznej: SIFTGPU_INCLUDE_DIR i SIFTGPU_LIBRARY.

Użyj CUpewnij GUI mieć SIFTGPU_INCLUDE_DIR wskazując na katalogu zawierającego pliki nagłówkowe i SIFTGPU_LIBRARY do pliku z biblioteki strony trzeciej .lib.

Powtórz dla każdej biblioteki osób trzecich, ponownie skonfiguruj i skompiluj.

+2

W jaki sposób informuje program cmake, gdzie znajduje się plik .dll? Widzę tylko statyczne połączenie z biblioteką i podpowiedź, gdzie znajduje się plik nagłówkowy. – EbbnFlow

+3

Cmake nie muszą wiedzieć, gdzie są pliki DLL. Pliki te są potrzebne tylko podczas uruchamiania pliku binarnego, a nie podczas kompilowania. – Guillaume

Powiązane problemy