gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:57:56 24 4
gpt4 key购买 nike

我们使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com