Eu usaria add_custom_command
para conseguir isso junto com cmake -E copy_if_different...
. Para informações completas, corra
cmake --help-command add_custom_command
cmake -E
Portanto, no seu caso, se você tiver a seguinte estrutura de diretório:
/CMakeLists.txt
/src
/libs/test.dll
e seu destino CMake ao qual o comando se aplica é MyTest
, então você pode adicionar o seguinte ao seu 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
Se você deseja apenas todo o conteúdo do /libs/
diretório copiado, use 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>)
Se você precisar copiar dlls diferentes dependendo da configuração (Release, Debug, por exemplo), você pode tê-los em subdiretórios nomeados com a configuração correspondente:, /libs/Release
e /libs/Debug
. Em seguida, você precisa injetar o tipo de configuração no caminho para a dll na add_custom_command
chamada, assim:
add_custom_command(TARGET MyTest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${PROJECT_SOURCE_DIR}/libs/$<CONFIGURATION>"
$<TARGET_FILE_DIR:MyTest>)
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIG>
como destino. Caso contrário, ele iria copiá-lo para o caminho de construção da biblioteca, o que era inútil.