dll - 如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中?

标签 dll cmake

我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件。现在我的工具要求一些 DLL 文件与可执行文件位于同一文件夹中。 DLL 文件位于源代码旁边的文件夹中。

如何更改我的 CMakeLists.txt 以便生成的 Visual Studio 项目在发布/调试文件夹中已经包含特定的 DLL 文件,或者在编译时复制它们?

最佳答案

我将使用 add_custom_command 以及 cmake -E copy_if_ Different... 来实现此目的。欲了解完整信息,请运行

cmake --help-command add_custom_command
cmake -E


因此,就您的情况而言,如果您具有以下目录结构:

/CMakeLists.txt
/src
/libs/test.dll

并且该命令适用的 CMake 目标是 MyTest,那么您可以将以下内容添加到 CMakeLists.txt:

add_custom_command(TARGET MyTest POST_BUILD        # Adds a post-build event to MyTest
    COMMAND ${CMAKE_COMMAND} -E copy_if_different  # which executes "cmake - E copy_if_different..."
        "${PROJECT_SOURCE_DIR}/libs/test.dll"      # <--this is in-file
        $<TARGET_FILE_DIR:MyTest>)                 # <--this is out-file path


如果您只想复制 /libs/ 目录的全部内容,请使用 cmake -E copy_directory:

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs"
        $<TARGET_FILE_DIR:MyTest>)


如果您需要根据配置(例如发布、调试)复制不同的 dll,那么您可以将它们放在以相应配置命名的子目录中:/libs/Release/libs/调试。然后,您需要将配置类型注入(inject)到 add_custom_command 调用中的 dll 路径中,如下所示:

add_custom_command(TARGET MyTest POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
        $<TARGET_FILE_DIR:MyTest>)

关于dll - 如何使用 CMake 将 DLL 文件复制到与可执行文件相同的文件夹中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671916/

相关文章:

c# - 在使用时换出 DLL

php - 由于不推荐使用 MSSQL,如何让 SQLSRV 扩展与 PHP 一起使用?

c++ - .net 中的静态链接是不可能的吗?你能用 C++/CLI 写一个包装器吗?

linux - CMake:如何在安装之前执行命令?

PortAudio 的 Cmake 文件

c++ - 我需要所有诺基亚 qt DLL 吗?

c# - 具有完全权限控制的 Windows 2008 R2 加载 DLL 失败

CLion 说 'Process finished with exit code 127'

linux - wget : unable to resolve host address “www.cmake.org”

c++ - CMake项目结构: How do I properly merge libraries together and include them in multiple executables