Yo usaría add_custom_command
para lograr esto junto con cmake -E copy_if_different...
. Para obtener información completa, ejecute
cmake --help-command add_custom_command
cmake -E
Entonces, en su caso, si tiene la siguiente estructura de directorio:
/CMakeLists.txt
/src
/libs/test.dll
y su objetivo de CMake al que se aplica el comando MyTest
, entonces puede agregar lo siguiente a su 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
Si solo desea /libs/
copiar todo el contenido del directorio, 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>)
Si necesita copiar diferentes dlls dependiendo de la configuración (Release, Debug, por ejemplo), entonces puede tenerlos en subdirectorios nombrados con la configuración correspondiente:, /libs/Release
y /libs/Debug
. Luego, debe inyectar el tipo de configuración en la ruta a la dll en la add_custom_command
llamada, así:
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>
para el destino de destino. De lo contrario, lo copiaría a la ruta de construcción de la biblioteca, lo cual era inútil.