2013-05-08 11 views
7

Mam nadzieję, że proste pytanie. Próbuję nauczyć się podstawowej kompilacji Objective-C z linii poleceń, z klangiem. Rozumiem, że Xcode jest lepszym rozwiązaniem dla złożonych projektów i mam zamiar wkrótce to zrobić, ale osobiście uważam, że lepiej rozumiem język, jeśli mogę go skompilować ręcznie w terminalu, a dla małych projektów programistycznych wprowadzających uważam go za mniejszy. kłopot z kompilacją w terminalu, niż konieczność rozpoczęcia nowego projektu.Kompilowanie wielu plików Objective-C w wierszu poleceń z klangiem

Pytanie brzmi: w jaki sposób mogę skompilować program Objective-C, który składa się z wielu plików (z wiersza poleceń)? (Próbuję wykonać program frakcji z rozdziału 7 podręcznika Kochana, z plikiem main.m i Fraction.m, który zawiera zarówno #import "Fraction.h", i plik Fraction.h, który importuje framework Foundation.) kompilować jeden plik używam coś podobnego

clang -fobjc-arc main.m -o prog1 

Ale jeśli mam wpisać, że i chcę to pliki inne niż main.m w projekcie pojawiają się błędy w tym:

ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

gdybym spróbuj dodać dodatkowe pliki do komendy jako argumenty, takie jak

potem dostać

clang: error: cannot specify -o when generating multiple output files 

I jeśli potem wyjąć -o argumentu jak

clang -fobjc-arc main.m Fraction.h Fraction.m 

następnie uzyskać gigantyczny stos błędów wszystkie odnoszące się do ramy fundamentowej, ostatecznie kończące się „krytyczny błąd: zbyt wiele błędów wysłanych, zatrzymanie się teraz ".

Jak to zrobić i sprawić, aby działało? Czy muszę po prostu go wyssać i użyć Xcode, gdy tylko zaangażuje się więcej niż jeden plik?

+3

Jednym błędem jest podanie pliku włączającego "Fraction.h" jako argumentu do kompilatora. –

+1

Ah! Dzięki. To wszystko: musiało to być tylko pliki .m, a nie .h. –

Odpowiedz

6

tylko pliki wykonawcze (* .m) są kompilowane, a nie interfejs/include plików, więc to powinno działać:

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

Dziwny komunikat o błędzie „generowanie wielu plików wyjściowych” jest prawdopodobnie spowodowane przez Fakt że clang może również kompilować pliki nagłówkowe do "prekompilowanych plików nagłówkowych".

+0

-fobjc-arc nie jest obsługiwany na platformach korzystających ze starszego środowiska wykonawczego –

+0

@AbdennourTOUMI: To prawda. Ale * to * pytanie najwyraźniej dotyczyło sposobu kompilowania kodu Objective-C * z ARC * w linii poleceń. W przeciwnym razie po prostu pomiń tę opcję. –

+0

nie, nie, mam na myśli to jest błąd, który jest wyświetlany, gdy próbuję skompilować te pliki https://github.com/macmade/host-manager/tree/master/source w systemie Ubuntu ... Będę bądź wdzięczny, jeśli wytłumaczysz mi, jak skompilować te pliki pod LINUX –

2

Nie określaj Fraction.h jako pliku źródłowego. Nie jest, jest to plik nagłówkowy.

Niemal na pewno chcesz rzucić -framework Foundation. Jeśli używasz innych frameworków, prawdopodobnie będziesz musiał je również określić.

Powiązane problemy