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

标签 c++ dll cmake

我一直在互联网上搜索,但找不到任何可以回答我的问题的内容(或者我不知道要搜索什么)。

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

我希望我已经足够清楚了。

最佳答案

首先,编辑您的 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 文件图书馆。

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

关于c++ - 如何在 CMake 项目中使用外部 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225121/

相关文章:

c++ - CMake ExternalData 自定义获取脚本

c++ - 静态库中变量的 init_priority 属性

c++ - 为什么总是得到相同的 boolean 值?

c++ - std::list::remove 方法是否调用每个已删除元素的析构函数?

c++ - 将 std::string 深度复制到 char* 的正确方法

c++ - 如何处理 CMake 中的子目录依赖关系?

c++ - QTimer::timeout 没有触发

c++ - 制作一个 VC++ .exe 到 DLL 。这可能吗?

c++ - Windows __stdcall DLL 的 DEF 文件格式? (*.def -> lib.exe -> *.lib)

c++ - 如何使共享库在它所依赖的不同版本的库上工作(使用 cmake)?