add_definitions aggiunge una definizione che viene corretta al momento dell'esecuzione di cmake (not make). Come definirli quando viene eseguito make (not cmake)? Il valore della definizione sarà un risultato di un comando personalizzato.Come definire i flag del compilatore in fase di compilazione usando CMake?
risposta
Ecco un esempio di un file marca:
.SUFFIXES: .c.o CC = cc INCLUDE = -I/usr/include -I/usr/sys/include # Comment out one or the other, mutually exclusive CFLAGS = -g # Debugging info #CFLAGS = -O2 # Optimize code LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # Debugging libs #LIBS = -L/usr/lib # Release FILES = mysource.o myroutines1.o myroutines2.o APP = myapp .c.o: $(CC) $(INCLUDE) $(CFLAGS) -c $< all : $(APP) $(APP) : $(FILES) $(CC) -o [email protected] $(FILES) $(LIBS) $(CFLAGS) clobber : clean mrproper clean: rm -rf $(FILES) mrproper: rm -rf $(APP)
Notate come viene definito il flag CFLAGS
. Commentare l'altro a seconda se si sta facendo un debug o rilasciare accumulo ..
Il campione di cui sopra è per un make file dal mio tutorial per la creazione di un eseguibile chiamato myapp
che compone di mysource.c
, myroutines1.c
e myroutines2.c
. E mostra come fare è abbastanza intelligente per costruire un eseguibile senza ricompilare.
Nota Il makefile ha orientamento unix/linux ed è molto rigido su schede/spazi che non vengono visualizzati nell'esempio sopra!
Spero che questo aiuti, Cordiali saluti, Tom.
Non sono sicuro di aver capito la domanda, ma ...
Forse si potrebbe usare una macro aggiuntivo per la fornitura della riga di comando flag di compilazione C, ad esempio:
CFLAGS= <whatever>
CFLAGS2= #nothing
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
Poi, quando si emettere il comando make
, fornire un argomento della riga di comando "CFLAGS2=xxx"
, che sostituisce l'impostazione predefinita nel makefile.
Aggiornamento
Sì, non ho capito la domanda del PO. Quindi gentilmente disprezzo.
@Loadmaster: ho fatto la stessa cosa qui ma ho downvoted perché non capisco la domanda dell'OP - ha detto 'quando make (non cmake) è eseguito?' ... – t0mm13b
La domanda è su cmake . CMake genera un makefile sulla piattaforma linux, quindi non posso modificarlo direttamente. –
@Lukasz Lew: Ahh ... non c'è da stupirsi ... ho avuto un downvoted ... lol ... – t0mm13b
Si possono trovare alcuni trucchi utili qui: '? Come definire quando (non cmake) viene eseguito make' How to run a command at compile time within Makefile generated by CMake?
- 1. Come passare un flag di compilazione per cmake test del compilatore iniziale?
- 2. Come impostare i flag specifici del compilatore con gli autotools
- 3. Passare i flag del compilatore tramite xcodebuild
- 4. Come impostare i flag di g ++ usando cmake in modo tale che gprof possa svelare?
- 5. Come aggiungere due flag del compilatore in Xcode
- 6. CMake, scegliere Xcode compilatore
- 7. Impostazione del compilatore predefinito in CMake
- 8. Compilazione del compilatore - quante volte?
- 9. CMake disable -std = C++ 11 flag per i file C
- 10. Compilazione incrociata CMake: flag C dal file toolchain ignorato
- 11. Come aggiungere il linker o il flag di compilazione nel file cmake?
- 12. Flag specifici del compilatore per file specifici in Xcode
- 13. Clojure costanti in fase di compilazione
- 14. Rimuovi runtime Controlla il flag del compilatore per progetto in CMAKE
- 15. come mettere gli argomenti della riga di comando del compilatore in punti specifici usando cmake
- 16. Come posso impostare i flag del compilatore Cython quando si utilizza pyximport?
- 17. Come compilare NSArray in fase di compilazione?
- 18. È valido "strlen()" in fase di compilazione?
- 19. offsetof in fase di compilazione
- 20. Come posso impostare specifici flag di compilatore per una destinazione specifica in una configurazione di build specifica utilizzando CMake?
- 21. Generazione dei parametri del modello in fase di compilazione
- 22. Come utilizzare il flag del compilatore -thread con ocamlbuild?
- 23. cmake errore di compilazione
- 24. Come causare intenzionalmente un errore in fase di compilazione sull'istanza del modello
- 25. Come organizzare i miei file usando CMake?
- 26. Rilevamento costante in fase di compilazione C++
- 27. Importanza del flag -pthread durante la compilazione
- 28. Come rendere GCC valutare le funzioni in fase di compilazione?
- 29. Determinazione del tipo di eccezione multicatch in fase di compilazione
- 30. Come ottenere string.format per protestare in fase di compilazione
Non capisco perché questo è stato downvoted come l'OP chiaramente affermato in altre parole come definirli in un makefile, questa era la mia comprensione? Correggimi se ho frainteso? – t0mm13b
Io non sono l'OP, e questo è un po 'in ritardo ... ma ... Immagino che l'OP (come me) stia cercando un comando CMake che implementa questa logica nei Makefile generati automaticamente. La modifica manuale dei Makefile non è un'opzione. –
@MattB: Oh ... ho dimenticato di questo ... un po 'troppo tardi !!! So che c'è una GUI di CMake ... non è tanto una risposta, ma più di un punto nella direzione per vedere se c'è un'opzione sulla GUI di CMake per farlo per te e vedere cosa genera ... – t0mm13b