Per fare ciò è necessario utilizzare add_custom_command per generare regole di compilazione per il file necessario nella directory di generazione. Quindi aggiungi le dipendenze dalle tue destinazioni a quei file: CMake crea solo qualcosa se è necessario da un bersaglio.
È inoltre necessario assicurarsi di copiare solo i file se non si sta costruendo dalla directory di origine.
Qualcosa di simile a questo:
project(foo)
cmake_minimum_required(VERSION 2.8)
# we don't want to copy if we're building in the source dir
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# list of files for which we add a copy rule
set(data_SHADOW yourimg.png)
foreach(item IN LISTS data_SHADOW)
message(STATUS ${item})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${item}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${item}" "${CMAKE_CURRENT_BINARY_DIR}/${item}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${item}"
)
endforeach()
endif()
# files are only copied if a target depends on them
add_custom_target(data-target ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/yourimg.png")
In questo caso sto usando un "ALL" target personalizzato con una dipendenza sul file yourimg.png per forzare la copia, ma si può anche aggiungere la dipendenza da un dei tuoi obiettivi esistenti.
quello che fa add_custom_target linea facendo. ho provato a modificare il codice e ho incluso il ciclo foreach per la riga add_custom_target ma non funziona su più file – Archit
Sì, credo che tu abbia un problema con le dipendenze ... come ho detto solo i file necessari per i target sono costruiti. Quindi, se non ci sono obiettivi dipendenti dalle tue immagini, non saranno costruiti. Ecco perché sto aggiungendo "add_custom_target" nel mio esempio. Una buona regola potrebbe essere 'add_custom_target (data-target ALL DEPENDS $ {data_SHADOW})' quindi dipende sempre da tutte le immagini. – Guillaume