Sto cercando di ottenere un file prodotto da un add_custom_command in una directory per essere una dipendenza di un add_custom_command in un'altra directory.cmake: alle dipendenze add_custom_command
Nella prima directory (lib/core) Ho un comando build che assomiglia a questo:
add_custom_command(
OUTPUT libcore.bc
COMMAND tartln -filetype=bc -link-as-library -o libcore.bc ${STDLIB_BC_FILES}
DEPENDS ${STDLIB_BC_FILES} tartln
COMMENT "Linking libcore.bc")
Nel secondo elenco, ho un comando che utilizza l'output di questo comando:
add_custom_command(OUTPUT ${OBJ_FILE}
COMMAND tartln -disable-fp-elim -filetype=obj -o ${OBJ_FILE} ${BC_FILE}
"${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
MAIN_DEPENDENCY "${BC_FILE}"
DEPENDS "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
COMMENT "Linking Tart bitcode file ${BC_FILE}")
Tuttavia, quando provo ad installare, ottengo il seguente errore:
make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'. Stop.
una cosa strana quello che vedo è che il percorso nel messaggio di errore è un percorso relativo, non assoluto, nonostante io sappia che $ {PROJECT_BINARY_DIR} è un percorso completo e corretto. Non so se questo è un problema o solo una stranezza del fare.
Inoltre ho provato a fare un target di alto livello per la libreria libcore, nella directory lib/core:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
E poi usando che nella clausola DEPENDS. La cosa strana è che funziona la prima volta che fai una build pulita, ma dà un errore in ogni build successiva. In ogni caso, la mia comprensione è che DEPENDS dovrebbe funzionare solo per le dipendenze dei file, quindi questa non sembra la soluzione corretta. (Come si dispone di un comando personalizzato che dipende da un obiettivo di livello superiore, quindi?)
Ho anche provato a mettere percorsi assoluti in tutto il mondo, nessun effetto.
Sfortunatamente, questa soluzione non funziona. (Mi rendo conto che è probabilmente una risposta disperata dopo quasi un anno.) Per quanto posso dire, il parametro DEPENDS di add_custom_command DEVE essere una dipendenza a livello di file - anche se i documenti dicono che una dipendenza a livello di destinazione * nello stesso directory * funzionerà, infatti ho provato diverse permutazioni negli ultimi 11 mesi e nessuna di esse funziona. Cioè, se definisco il target personalizzato "foo" nella stessa directory, e poi dico DEPENDS "foo", verrà semplicemente segnalato "nessuna regola per rendere target 'foo' ..." – Talin
@Talin Quindi questo sembra essere un bug, c'è un problema segnalato per questo in [CMake bugtracker] (http://www.cmake.org/Bug/my_view_page.php)? – lef