add_definitions fügt eine Definition hinzu, die zu dem Zeitpunkt festgelegt wird, wenn cmake (nicht make) ausgeführt wird. Wie man sie definiert, wenn make (nicht cmake) ausgeführt wird? Der Wert der Definition wird eine Ausgabe eines benutzerdefinierten Befehls sein. HierWie definieren Compilerflags zur Kompilierzeit mit CMake?
Antwort
ist ein Beispiel für eine Make-Datei:
.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)
Beachten Sie, wie das Flag CFLAGS
definiert ist. Kommentieren Sie die anderen je nachdem, ob Sie eine Debug tun oder Build Release ..
Das obige Beispiel ist für eine Make-Datei von meinem Tutorial zum Erstellen einer ausführbaren Datei namens myapp
, die komponiert von mysource.c
, myroutines1.c
und myroutines2.c
. Und es zeigt, wie make intelligent genug ist, um eine ausführbare Datei ohne Neukompilierung zu erstellen.
Hinweis Das Makefile hat eine Unix/Linux-Ausrichtung und ist sehr streng auf Tabs/Leerzeichen, die im obigen Beispiel nicht angezeigt werden!
Hoffen, dass dies hilft, Mit freundlichen Grüßen, Tom.
Ich bin nicht sicher, ich verstehe die Frage, aber ...
Vielleicht könnten Sie ein zusätzliches Makro für die Bereitstellung von Flags Befehlszeile C-Compiler verwenden, zB:
CFLAGS= <whatever>
CFLAGS2= #nothing
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
Dann, wenn Sie Geben Sie den Befehl make
ein, und geben Sie ein "CFLAGS2=xxx"
Befehlszeilenargument an, das die Standardeinstellung im Makefile überschreibt.
aktualisieren
Ja, ich verstehe nicht die Frage des OP. Also bitte ignorieren.
@Loadmaster: Ich habe das gleiche hier gemacht, aber wurde downvoted, da ich die Frage des OP nicht verstehe - er hat gesagt 'wenn make (nicht cmake) ausgeführt wird?' ... – t0mm13b
Die Frage ist über cmake . CMake erzeugt ein Makefile auf der Linux-Plattform, so dass ich es nicht direkt modifizieren kann. –
@Lukasz Lew: Ahh .... kein Wunder ... Ich wurde downvoted ... lol ... – t0mm13b
Sie können einige nützliche Tricks finden Sie hier: ‚Wie sie definieren, wenn make (nicht cmake) ausgeführt wird‘ How to run a command at compile time within Makefile generated by CMake?
- 1. Singleton-Initialisierung zur Kompilierzeit
- 2. Vollständig getippt zur Kompilierzeit
- 3. offsetof zur Kompilierzeit
- 4. Fließkomma-Arithmetik zur Kompilierzeit
- 5. if/else zur Kompilierzeit?
- 6. Generieren von Code zur Kompilierzeit mit Skripten
- 7. Unit Testing mit Nase: Tests zur Kompilierzeit?
- 8. Wie berechne Offset eines Klassenmitglieds zur Kompilierzeit?
- 9. Wie injiziere ich C# -Code zur Kompilierzeit?
- 10. Wie erhalte ich den Methodennamen zur Kompilierzeit?
- 11. Wie ein If zur Kompilierzeit in C++
- 12. Wie Unit-Test zur Kompilierzeit ausschließen
- 13. Wie wird die Typprüfung zur Kompilierzeit durchgeführt?
- 14. Wie triviale Destruktor zur Kompilierzeit zu erkennen?
- 15. Wie man Exception zur Kompilierzeit in Java
- 16. Erzwinge eine enge implizite Koerzition zur Kompilierzeit
- 17. Qt - Fehler 2 zur Kompilierzeit
- 18. Android: XML-Datei zur Kompilierzeit validieren?
- 19. Compilerflags im Android NDK steuern?
- 20. Verwandle eine Textdatei in eine Zeichenkette zur Kompilierzeit
- 21. So überprüfen Sie den Typ zur Kompilierzeit
- 22. So generieren Sie verschachtelte Schleifen zur Kompilierzeit
- 23. Ausdruckauswertung auf oberster Ebene zur Kompilierzeit
- 24. Wo werden lokale Variablen zur Kompilierzeit gespeichert?
- 25. Kann eine Datei zur Kompilierzeit gelesen werden?
- 26. Meiste Pythonic Weg, Funktionsmetadaten zur Kompilierzeit zur Verfügung zu stellen?
- 27. GroovyAST generisches Feld zur Kompilierzeit hinzufügen
- 28. Testen von AbstractProcessor (Javas Annotationshandling zur Kompilierzeit)
- 29. Warum wird die Lokalität zur Kompilierzeit bestimmt?
- 30. So erkennen Sie use_frameworks! zur Kompilierzeit
Sie nicht verstehen, warum dies als OP Downvoted wurde eindeutig erklärt mit anderen Worten, wie man sie in einem Makefile definiert, das war mein Verständnis? Korrigiere mich, wenn ich falsch verstanden habe? – t0mm13b
Ich bin nicht das OP, und das ist ein wenig spät ... aber ... Ich stelle mir vor, dass das OP (wie ich) einen CMake-Befehl sucht, der diese Logik in den automatisch generierten Makefiles implementiert. Das manuelle Bearbeiten von Makefiles ist keine Option. –
@MattB: Oh ... hab das vergessen ... ein bisschen zu spät !!! Ich weiß, dass es eine CMake-GUI gibt. Es ist nicht viel von einer Antwort, aber mehr von einem Punkt in der Richtung zu sehen, ob es eine Option auf der CMake-GUI gibt, um das für Sie zu tun und zu sehen, was es erzeugt ... – t0mm13b