2013-05-08 9 views
7

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?

+3

Ein Fehler ist, dass Sie die Include-Datei "Fraction.h" als Argument für den Compiler angeben. –

+1

Ah! Vielen Dank. Das war's: es mussten nur die .m Dateien sein und nicht die .h. –

Antwort

6

Nur die Implementierungsdateien (* .m) kompiliert werden, nicht die Schnittstelle/Include-Dateien, so sollte diese Arbeit:

clang -fobjc-arc main.m Fraction.m -o prog1 

Die seltsame Fehlermeldung „Erzeugen mehrerer Ausgabedateien“ wahrscheinlich durch die verursacht wird, Tatsache , dass clang Header-Dateien auch zu "vorkompilierten Header-Dateien" kompilieren kann.

+0

-fobjc-arc wird nicht auf Plattformen unterstützt, die die Legacy-Laufzeit verwenden –

+0

@AbdennourTOUMI: Das ist richtig. Aber * diese * Frage war anscheinend darüber, wie man Objective-C-Code * mit ARC * in der Kommandozeile kompiliert. Ansonsten lassen Sie diese Option einfach weg. –

+0

nein ,, nein, ich meine das ist ein Fehler, der angezeigt wird, wenn ich versuche, diese Dateien https://github.com/macmade/host-manager/tree/master/source unter Ubuntu zu kompilieren ... werde ich Sei dankbar, wenn du mir erklärst, wie man diese Dateien unter Linux kompiliert –

2

Geben Sie Fraction.h nicht als Quelldatei an. Es ist nicht, es ist eine Header-Datei.

Sie wollen auch fast sicher in -framework Foundation werfen. Wenn Sie andere Frameworks verwenden, müssen Sie diese wahrscheinlich ebenfalls angeben.

Verwandte Themen