如何在CMake项目中使用外部DLL

mit*_*jap 14 c++ dll cmake

我一直在网上搜索,但我找不到任何能回答我问题的东西(或者我不知道要搜索什么).

无论如何,这是我的问题:我想在我的CMake项目中使用3rdParty库(.dll文件).图书馆(https://github.com/pitzer/SiftGPU我想要包含的)是开源的,并且我也想使用二进制文件,如果相关,也使用CMake作为构建工具.

我希望我很清楚.

Gui*_*ume 14

首先,编辑您的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 ()
Run Code Online (Sandbox Code Playgroud)

接下来,您可以对其他库执行相同操作,并在检测到每个库时链接到目标:

target_link_libraries(yourtarget ${YOUR_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

然后你可以用CMake配置你的项目,但由于它没有任何神奇的方法来找到你安装的库,它将找不到任何东西,但它会创建两个缓存变量:SIFTGPU_INCLUDE_DIRSIFTGPU_LIBRARY.

使用CMake GUI SIFTGPU_INCLUDE_DIR指向包含头文件的目录和第三方库SIFTGPU_LIBRARY.lib文件.

对每个第三方库重复,再次配置并编译.

  • Cmake不需要知道dll文件在哪里.仅在运行二进制文件时才需要这些文件,而不是在编译它时. (4认同)
  • 这如何告诉cmake .dll文件所在的位置?我只看到静态链接到lib并提供头文件所在的提示. (2认同)