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