我们使用 CMake 在 SVN 中生成源代码的 Visual Studio 文件。现在我的工具需要一些 DLL 文件与可执行文件位于同一文件夹中。DLL 文件位于旁边的文件夹中...
我们使用 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>)
如果您需要根据配置(例如,Release、Debug)复制不同的 dll,那么您可以将这些 dll 放在以相应配置命名的子目录中: /libs/Release
和 /libs/Debug
。然后,您需要在调用中将配置类型注入到 dll 的路径中 add_custom_command
,如下所示:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
$<TARGET_FILE_DIR:MyTest>)