Hoffentlich einfache Frage. Ich versuche das grundlegende Kompilieren von Objective-C von der Kommandozeile aus mit clang zu lernen. Ich verstehe, dass Xcode eine bessere Lösung für komplexe Projekte ist und ich plane, bald darauf zu gehen, aber ich persönlich fühle, dass ich eine Sprache besser verstehe, wenn ich sie manuell in einem Terminal zusammenstellen kann, und für kleine einleitende Programmierprojekte finde ich weniger davon ein Aufwand, um in einem Terminal zu kompilieren, als ein neues Projekt zu starten.Kompilieren mehrerer Objective-C-Dateien in der Befehlszeile mit clang
Die Frage ist also: Wie kompiliere ich ein Objective-C-Programm, das aus mehreren Dateien besteht (aus der Befehlszeile)? (Ich versuche, das Bruchprogramm aus Kapitel 7 von Kochans Lehrbuch mit einer Datei main.m und Fraction.m zu erstellen, die sowohl #import "Fraction.h" als auch eine Fraction.h-Datei enthält, die das Foundation-Framework importiert.) zum kompilieren wie eine einzelne Datei, die ich etwas verwenden
clang -fobjc-arc main.m -o prog1
Aber wenn ich das geben, und ich möchte Dateien enthalten andere als main.m im Projekt bekomme ich Fehler wie:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
wenn ich Versuchen Sie, dem Befehl die zusätzlichen Dateien als Argumente hinzuzufügen, z. B.
clang -fobjc-arc main.m Fraction.h Fraction.m -o prog1
dann bekomme ich
clang: error: cannot specify -o when generating multiple output files
Und wenn ich dann das Argument -o entfernen wie
clang -fobjc-arc main.m Fraction.h Fraction.m
dann bekomme ich einen riesigen Haufen von Fehlern alle auf das Fundament Rahmen beziehen, schließlich in „fatal enden Fehler: zu viele Fehler ausgegeben, jetzt gestoppt ".
Wie mache ich das und lasse es funktionieren? Oder muss ich einfach nur saugen und Xcode verwenden, wenn mehr als eine Datei beteiligt ist?
Ein Fehler ist, dass Sie die Include-Datei "Fraction.h" als Argument für den Compiler angeben. –
Ah! Vielen Dank. Das war's: es mussten nur die .m Dateien sein und nicht die .h. –