Ich habe eine Datei namens "main.c". Was ist das einfachste Makefile, das ich haben kann, um diese Datei in eine ausführbare Datei zu kompilieren, die ich wie ./blah
ausführen kann?Was ist das einfachste MAKEFILE Ich könnte die Arbeiten für eine einzelne C-Datei haben?
Antwort
all:
gcc -o blah main.c
Sie brauchen Makefile hier nicht, einfache Shell-Skript ist in Ordnung.
Zuweisung Blatt sagen wir müssen ein Makefile enthalten. – Ash
Wenn ich dies benutze und "make" ausführen - es gibt "Makefile: 2: *** fehlt Trennzeichen. Stop." – Ash
@Ash: Das Bit vor 'gcc' muss ein Tab sein, keine Leerzeichen. (Sie erhalten diesen Fehler, wenn Sie Leerzeichen verwenden.) –
all: blah
blah: main.c
gcc main.c -o blah
Ich schrieb und schrieb meine Antwort vor allem, was sonst noch gezeigt wurde, und ich sah das "Hausaufgaben" -Tag nicht. Ich stimme Chris Lutz zu; Sie werden nirgendwo im Leben nach Hilfe bei solchen miserablen Aufgaben fragen. –
'all: blah' macht das weniger einfach, was es sein muss und kann auch Dinge kaputt machen, wenn eine Datei namens' all' existiert. Abgesehen von diesem Punkt ist dies die beste Antwort. –
Eigentlich, nach weiterem Nachdenken, wird in diesem einfachen Fall eine Datei namens 'all 'wahrscheinlich nicht die Abhängigkeitsüberprüfung durchbrechen; es ist immer noch redundant, da make das erste Ziel in jedem Fall als Standardziel behandelt. –
Wenn Sie mit GNU Make und wenn Sie in zusätzlichen Bibliotheken verknüpfen müssen die einfachste Make-Datei ist nicht, überhaupt keine Make-Datei. Versuchen:
make main
Wenn Sie wollen main
nicht müssen angeben, dann können Sie den folgenden einzeiligen Makefile verwenden:
all: main
GNU hat Machen Sie mehrere implizite Regeln, die es, wenn Sie verwendet definiere sie nicht selbst. Derjenige, der diese Arbeit macht, ist so etwas wie:
%: %.c
$(CC) $^ -o [email protected]
Weitere Informationen finden Sie unter: http://www.gnu.org/software/make/manual/make.html#Using-Implicit
Offenbar erfordert die Zuweisung, dass die Ausgabe 'blah' ist, nicht' main', also benötigt er ein Makefile. Das Obige ist immer noch nützliche Information, wird aber hier nicht wirklich angewendet. –
Wenn Ihre ausführbare Datei "blah" heißen sollte, wäre es am einfachsten, wenn Sie Ihre Quelldatei in "blah.c" umbenennen, wenn dies erlaubt ist. –
@ T.J.Crowder: 'blah' scheint keine Anforderung zu sein, sondern eher ein Beispiel: OP sagte" dass ich rennen kann * wie * './Blah'". Dieses One-Liner 'Makefile' scheint gut zu sein – MestreLion
Die einfachste ich empfehlen würde, ist:
myprog: myprog.o
$(CC) -o [email protected] @^
Via impliziten Regeln, wird dies zur Folge ein separater Schritt, der myprog.c
zu myprog.o
vor dem Verknüpfen kompiliert. Der Grund Ich mag diese besser als die andere Antwort (von Arnaud) ist, dass es zu mehr Quelldateien skaliert, ohne dass die Make-Datei zu vergrößern, die deutlich:
myprog: myprog.o foo.o bar.o helper.o my.o your.o his.o her.o
$(CC) -o [email protected] @^
Sollte das' $^'anstelle von' @^'sein? – user2023370
Wie Jander gesagt, wenn Ihre Quelle eine einzelne Datei blah.c
benannt ist
all: blah
Oder auch:
blah:
Alles andere ist Sie könnte dies zur Ausgabe blah
namens eine ausführbare Datei verwenden implizit, wenn GNU mit make
Während dies sehr einfach ist, hat es einige Vorteile gegenüber einige der komplexeren Antworten haben:
- Compiler fest einprogrammiert ist nicht: Lassen Sie Ihre Umgebung
gcc
für Sie wählen! - Ihr Programmname ist nur einmal eingestellt, eine gute DRY Programmierpraxis.
- Erstellt keine Zwischen
*.o
Dateien, die für dieses einfache Projekt nicht benötigt werden.
Das heißt, ich schlage vor, Sie dringend, Ihre Makefile
zu verbessern, indem sie zumindest clean
und all
Regeln und -Wall
Flags hinzufügen.Dies kann mit der folgenden Makefile
erfolgen, noch alle oben genannten Vorteile zu halten:
TARGET=blah CFLAGS=-Wall .PHONY: all clean all: $(TARGET) $(TARGET): clean: rm -f $(TARGET)
- 1. Wie könnte ich dieses Makefile verbessern?
- 2. Sie haben das automatische Layout für eine einzelne Ansicht deaktiviert?
- 3. Was ist das einfachste RGB-Bildformat?
- 4. Makefile-Abhängigkeiten arbeiten nicht für falsches Ziel
- 5. Was ist? = In Makefile
- 6. Was ist die einfachste Linienerkennungsmethode in OpenCV?
- 7. Was ist der Grund für die Makefile-Whitespace-Syntax?
- 8. Was ist die einfachste URL-Kürzel-Anwendung, die man in Python für die Google App Engine schreiben könnte?
- 9. Was ist der richtige Weg, um eine einzelne Signal Handler-Funktion für mehrere Signale zu haben?
- 10. Was ist das einfachste Java ORM, das Sqlite unterstützt?
- 11. Was ist die einfachste/klarste XSD für dieses XML?
- 12. Welches ist das einfachste Registrierungsformular?
- 13. Ich habe etwas gemacht, das für die Gemeinschaft nützlich sein könnte. Was jetzt?
- 14. Was ist die einfachste Art, JSON in Scala zu parsen?
- 15. Was ist der einfachste Weg, um eine lokale LAMP-Installation für die Web-Entwicklung auf Mac OS X zu haben?
- 16. Makefile für eine Bibliothek
- 17. Was ist das einfachste Server-Side JavaScript zu lernen?
- 18. SDK: Was ist das genau? Wie könnte es nützlich sein?
- 19. Was ist die längste Zeichenfolge, die ich haben kann?
- 20. Wie kann ich eine zentrierte einzelne Grenze zwischen Spalten haben?
- 21. Sollte ich eine einzelne oder mehrere Skriptdateien haben?
- 22. Für was ist das AttachEvent
- 23. Was ist die Laderbestellung für das Webpack?
- 24. Was ist das für eine Javascript-Notation?
- 25. Was ist das für eine Syntax: [] ._
- 26. Wie Makefile Zeichenfolge in einzelne Wörter aufgeteilt?
- 27. Was ist das Symbol für eine Warteschlange?
- 28. Was ist ein geschachteltes Modell und was könnte es möglicherweise mit Joomlas Menüelement zu tun haben?
- 29. Rubin 1.9 - Was ist die einfachste Umkehrung von `string.codepoints.to_a`?
- 30. Was ist der einfachste Weg, um sicherzustellen, dass 2 Listen in Lisp die gleiche Länge haben?
Bitte einige Mühe machen Sie Ihre Hausaufgaben zu machen, bevor uns zu fragen. Es gibt einen Grund, warum Ihr Professor möchte, dass Sie ein Makefile verwenden - damit Sie Makefiles für nützlichere Projekte schreiben können. –
Sorry, wollte die Hausaufgabenpolizei nicht verärgern. Ich habe es googlen versucht, aber das Makefile ist offensichtlich unglaublich mächtig und kann extrem komplex sein. Ich gebe zu, dass ich einige Probleme habe, viel davon zu verstehen. Dieses Thema ist kein Programmierobjekt, aber die Bewertung erfordert C-Code, um native OS-Funktionen aufzurufen. Ich habe C noch nie vorher berührt, und diese Aufgabe ist in ein paar Stunden fällig. Ich war frustriert und verzweifelt und brauchte Hilfe. Entschuldigung, wenn ich dich verärgert habe. – Ash