Ho bisogno di eseguire un comando con add_custom_command
a catturare il suo stdout. Il reindirizzamento della shell al file >
non funziona e add_custom_command
non ha alcuna opzione correlata. Come posso farlo?Come reindirizzare l'output di un comando personalizzato CMake in un file?
risposta
(Si prega di notare che ho cambiato la mia risposta dopo aver esaminato la questione, perché il commento di Florian. Maggiori informazioni sul modifica sotto)
La documentazione del execute_process
afferma chiaramente che non fa uso di shell intermedi, così reindirizzamento gli operatori non lavorano lì.
Ma non è vero per il add_custom_command
. Il reindirizzamento dovrebbe funzionare lì come previsto. [EDIT] Il motivo a volte non sembra funzionare è una sfortunata combinazione del generatore CMake, dello specificatore VERBATIM
e dello spazio (mancante) tra >
e il nome del file.
Si è scoperto se si effettua che ci sia uno spazio tra >
e il nome del file che funziona con nella maggior parte dei casi, anche con VERBATIM
:
add_custom_command(OUTPUT ${some-file}
COMMAND cmake --version > ${some-file}
VERBATIM # optional
)
Una nota su una soluzione alternativa: in precedenza Pensavo allo add_custom_command
, così come lo execute_process
non utilizza una shell intermedia quindi ho suggerito di chiamare uno script CMake che contiene un comando execute_process
che esegue il comando effettivo, reindirizzando il suo output con l'opzione OUTPUT_FILE
.
Se per qualche motivo la soluzione di cui sopra ancora non riesce per voi, provate la soluzione alternativa utilizzando un ExecuteProcessWrapper.cmake
- 1. Comando personalizzato CMake copia più file
- 2. come reindirizzare un output di un comando a due file
- 3. cmake comando personalizzato per copiare e rinominare
- 4. Aggiungi passaggio personalizzato in CMake
- 5. Estensione di CMake con un generatore personalizzato?
- 6. Registrazione Java: come reindirizzare l'output in un file di registro personalizzato per un logger?
- 7. Esecuzione di un comando bash tramite CMake
- 8. Come reindirizzare llvm :: outs() in un file?
- 9. Come reindirizzare un comando FOR nel lotto di Windows
- 10. Come reindirizzare l'output del compilatore gcc in un file?
- 11. Come fare la riconfigurazione di CMake dipende dal file personalizzato?
- 12. Come reindirizzare sia stdout e stderr in un file
- 13. Come reindirizzare un comando della shell in output su un input di script Python?
- 14. Come reindirizzare l'output di Valgrind in un file?
- 15. Come reindirizzare l'output di DBMS_OUTPUT.PUT_LINE in un file?
- 16. Come eseguire un file .bat da cmake?
- 17. Come reindirizzare l'output di un processo al comando logger e al comando principale?
- 18. Come reindirizzare un documento qui attraverso un comando e acquisire il risultato in una variabile?
- 19. eseguire un comando shell (ctags) in cmake e make
- 20. Come si produce solo un file oggetto (* .o) da un target di build CMake?
- 21. C'è un modo per reindirizzare l'output di un comando CLI AWS come input a un altro?
- 22. Come si aggiunge un comando personalizzato indirizzato in WPF?
- 23. Come possiamo eseguire un comando personalizzato in eclissi?
- 24. Come si scrive un comando personalizzato in Atom?
- 25. Come posso inviare parametri a un comando personalizzato in Xamarin.iOS?
- 26. Reindirizzare `sys.stdout` in un file o un buffer
- 27. CMake: Come avere un obiettivo per copiare i file
- 28. Come posso reindirizzare il registratore ad un wxPython textCtrl usando un gestore di registrazione personalizzato?
- 29. Reindirizzare l'output in un file di registro utilizzando node.js
- 30. target personalizzato come libreria di destinazione in cmake
Credo che l'implementazione di CMake di comando personalizzato può essere dipendente dalla piattaforma. Puoi aggiungere un esempio in cui il comando personalizzato non sta utilizzando una shell intermedia? Ho utilizzato correttamente il reindirizzamento stderr/stderr con i generatori Ninja e Visual Studio. Questi generatori eseguono il prefisso 'cmd.exe/c' per i comandi personalizzati su Windows. E i comandi pipe sono testati nel [custom command unit test] di CMake (https://github.com/Kitware/CMake/blob/master/Tests/CustomCommand/CMakeLists.txt#L231). – Florian
@ Florian, hai ragione, ho sbagliato. Sto fissando la mia risposta. –
Ho trovato quel thread sul forum degli sviluppatori di CMake: http://cmake.3232098.n2.nabble.com/Redirect-output-from-add-custom-target-td7583901.html. Scrivono, che il reindirizzamento in 'add_custom_target()' potrebbe non funzionare in alcuni casi. Dall'altro lato, sia 'add_custom_command()' che 'add_custom_target()' accettano l'opzione 'VERBATIM', che non ha alcun senso fino a quando la shell non è coinvolta. Contrariamente, 'execute_process()' non accetta quell'opzione e ha un'osservazione esplicita sul reindirizzamento. Quindi, dov'è la verità? – Tsyvarev