Ejecuta la función cmake o add_custom_command solo una vez.
Tengo una solución fea para copiar archivos .dll a una carpeta “bin” que utiliza “add_custom_command”. Funciona, pero a veces, durante una compilación en paralelo, obtengo el siguiente error:
Error copying directory from
Mi suposición (no puedo saberlo, ya que CMake no me dice cuál es el problema) es que cuando se realizan llamadas a “copy” al mismo tiempo, se producen errores en el sistema de archivos.
¿Existe alguna manera en CMake de especificar que solo se debe ejecutar la primera invocación de la función o de “add_custom_command”?
Si importa, esta es mi lógica para copiar dlls (cada destino que necesita esos DLL llama a la función con sí mismo como argumento):
function(copyBla projectName)
add_custom_command(TARGET ${projectName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${SDK_PATH}/Bla/${BLA_VERSION}/x64/bin ${CMAKE_BINARY_DIR}/bin/$
endfunction()
PD: No quiero limitarme a que solo un objetivo llame a “copyBla”, ya que eso es frágil (otros objetivos dependen de este objetivo solo porque quieren usar los mismos dlls).
davy.ai
Para garantizar que solo se ejecute una vez la primera invocación de una función o
add_custom_command
en construcciones en paralelo, CMake proporciona la opciónIMPLICIT_DEPENDS
. Configurar esta opción comoON
garantiza que si el comando o función depende de un archivo que aún no existe, solo se ejecutará una vez.Para utilizar esta opción en la función
copyBla
, simplemente agregue la opciónIMPLICIT_DEPENDS
a la llamada deadd_custom_command
:Esto garantiza que el comando solo se ejecutará una vez, independientemente de cuántos objetivos llamen a la función o de cuántas construcciones en paralelo se estén ejecutando.