es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo forzar que un objetivo se reconstruya si se actualiza un script dependiente?

Estoy escribiendo algunos scripts personalizados que se invocan en comandos personalizados para objetivos de CMake. Quiero que los objetivos se reconstruyan si alguno de los scripts se actualiza (por ejemplo, touch script.sh). He probado varias variaciones usando el argumento DEPENDS, pero nada de lo que he intentado funciona.

Aquí está una versión simplificada de lo que tengo:

function(run_mi_regla_especial objetivo)

set(script_a_ejecutar ${CMAKE_SOURCE_DIR}/scripts/script.sh)

add_custom_command(
    TARGET ${objetivo} PRE_BUILD
    COMMAND find ${CMAKE_CURRENT_SOURCE_DIR} -name "*.hpp" -exec ${script_a_ejecutar} {} +
    DEPENDS ${script_a_ejecutar}
)

endfunction()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que el objetivo de CMake se reconstruya cuando alguno de los scripts personalizados se actualice, debe utilizar el argumento “OUTPUT” del comando “add_custom_command()” para especificar los archivos generados, y luego utilizarlos como “DEPENDS” para el objetivo. Aquí hay una versión actualizada de la función “run_my_special_rule()”:

    function(run_my_special_rule target)
    
    set (script_to_run ${CMAKE_SOURCE_DIR}/scripts/script.sh)
    
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_files.txt
        COMMAND find ${CMAKE_CURRENT_SOURCE_DIR} -name "*.hpp" -exec ${script_to_run} {} +
        DEPENDS ${script_to_run}
    )
    
    add_custom_target(${target} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated_files.txt)
    
    endfunction()
    

    En esta versión, hemos agregado un argumento “OUTPUT” a “add_custom_command()”, especificando el nombre de un archivo que será generado por el script. También hemos cambiado el “TARGET” a un objetivo personalizado (“add_custom_target()”), y lo hemos hecho depender del archivo generado. Esto significa que cada vez que se ejecuta el comando personalizado y se actualizan los archivos generados, se reconstruirá el objetivo personalizado.

Comments are closed.