2013-06-20 28 views
7

İnternet üzerinden arama yapıyorum ancak soruma cevap verecek hiçbir şey bulamadım (ya da ne arayacağımı bilmiyorum).CMake projesinde dış DLL'ler nasıl kullanılır?

Her neyse, burada benim sorunum: CMake projemde 3rdParty kitaplıklarını (.dll dosyaları) kullanmak istiyorum. Dahil etmek istediğim kitaplık (https://github.com/pitzer/SiftGPU) açık kaynak kodludur ve kullanmak istediğim ikilide de kullanılabilir ve ilgili ise CMake'i derleme aracı olarak kullanır.

Umarım yeterince açıkım.

cevap

9

İlk önce, üçüncü taraf kitaplığınızı eklemek için CMakeLists.txt dosyanızı düzenleyin. İki şeye ihtiyacınız olacak: başlık dosyalarına giden yol ve kütüphane dosyasına bağlantı. Örneğin:

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

Sonraki, diğer kütüphaneler için de aynısını yapabilir ve her kütüphaneler algılandığında, hedefe link:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

Sonra olarak CMake ile projenizi yapılandırmak, ancak yüklü kitaplığınızı bulmak için herhangi bir sihir yolu yoktur, hiçbir şey bulamaz, ancak iki önbellek değişkeni oluşturur: SIFTGPU_INCLUDE_DIR ve SIFTGPU_LIBRARY.

Başlık dosyalarını içeren dizini işaret eden ve SIFTGPU_LIBRARY dosyasını üçüncü taraf kitaplığınızın .lib dosyasına işaretlemek için CMOK GUI kullanarak SIFTGPU_INCLUDE_DIR kullanın.

Her üçüncü taraf kitaplığı için tekrarlayın, yeniden yapılandırın ve derleyin.

+2

Bu, cdll dosyasının .dll dosyasının nerede bulunduğunu nasıl gösterir? Ben sadece bir lib'e statik bağlantı görüyorum ve başlık dosyasının nerede olduğuna dair bir ipucu veriyorum. – EbbnFlow

+3

Cmake dll dosyalarının nerede olduğunu bilmeye gerek yok. Bu dosyalar sadece ikiliyi derlerken değil, çalıştırırken gereklidir. – Guillaume

İlgili konular