2013-06-20 41 views
7

我一直在通過互聯網搜索,但找不到任何可以回答我的問題的東西(或者我不知道要搜索什麼)。如何在CMake項目中使用外部DLL

無論如何,這是我的問題: 我想在我的CMake項目中使用3rdParty庫(.dll文件)。我想要包含的庫(https://github.com/pitzer/SiftGPU)是開源的,並且也可以使用我想要使用的二進制文件,並且如果相關的話也使用CMake作爲構建工具。

我希望我已經夠清楚了。

回答

9

首先,編輯您的CMakeLists.txt以包含您的第三方庫。您需要兩件事:頭文件和庫文件的鏈接路徑。例如:

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

接下來,你可以對其他圖書館做同樣的檢測每一個庫時,鏈接到目標:

target_link_libraries(yourtarget ${YOUR_LIBRARIES}) 

然後,你可以配置CMake的項目,但作爲它沒有任何神奇的方式來找到你安裝的庫,它不會找到任何東西,但它會創建兩個緩存變量:SIFTGPU_INCLUDE_DIRSIFTGPU_LIBRARY

使用CMake GUI將SIFTGPU_INCLUDE_DIR指向包含頭文件的目錄,並將SIFTGPU_LIBRARY指向第三方庫的.lib文件。

重複每個第三方庫,再次配置並編譯。

+2

這是如何告訴cmake .dll文件所在的地方?我只看到靜態鏈接到一個庫並提供一個提示頭文件的位置。 – EbbnFlow

+3

Cmake不需要知道dll文件在哪裏。這些文件只在運行二進制文件時不需要編譯時才需要。 – Guillaume

相關問題