2013-05-08 12 views
7

Si spera che sia una domanda semplice. Sto cercando di imparare la compilazione Objective-C di base dalla riga di comando, con clang. Capisco che Xcode è una soluzione migliore per progetti complessi e ho intenzione di trasferirmi presto, ma personalmente sento di capire meglio un linguaggio se riesco a compilarlo manualmente in un terminale, e per i piccoli progetti introduttivi di programmazione lo trovo meno di una seccatura da compilare in un terminale piuttosto che dover iniziare un nuovo progetto.Compilare più file Objective-C sulla riga di comando con clang

Quindi la domanda è: come si compila un programma Objective-C costituito da più file (dalla riga di comando)? (Sto provando a fare il programma frazione dal capitolo 7 del manuale di Kochan, con un file main.m e Fraction.m che entrambi #import "Fraction.h" e un file Fraction.h che importa il framework Foundation.) per compilare un singolo file che uso qualcosa come

clang -fobjc-arc main.m -o prog1 

Ma se di tipo I che e voglio includere file diversi main.m nel progetto, ottengo gli errori, tra cui:

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

Se io prova ad aggiungere i file aggiuntivi al comando come argomenti, come

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

tanto sono

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

E se quindi rimuovere l'argomento -o come

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

tanto sono un mucchio enorme di errori tutti riferiti al quadro fondazione, alla fine terminano in "fatale errore: troppi errori emessi, fermandosi ora ".

Come posso fare e farlo funzionare? O devo semplicemente succhiarlo e usare Xcode non appena è coinvolto più di un file?

+3

Un errore è che si specifica il file di inclusione "Fraction.h" come argomento per il compilatore. –

+1

Ah! Grazie. È tutto: doveva essere solo il file .m e non il .h. –

risposta

6

solo i file di implementazione (* .m) sono compilati, non l'interfaccia/includono file, quindi questo dovrebbe funzionare:

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

Il messaggio di errore strano "la generazione di file di output" è probabilmente causato dal infatti quel clang può anche compilare i file di intestazione in "file di intestazione precompilati".

+0

-fobjc-arc non è supportato su piattaforme che utilizzano il runtime legacy –

+0

@AbdennourTOUMI: è corretto. Ma * questa * domanda apparentemente riguardava come compilare il codice Objective-C * con ARC * sulla riga di comando. Altrimenti ometti quella opzione. –

+0

no ,, no, voglio dire che si tratta di un errore che viene visualizzato quando sto cercando di compilare quei file https://github.com/macmade/host-manager/tree/master/source in Ubuntu ... lo farò sii grato se mi spieghi come compilare questi file sotto LINUX –

2

Non specificare Fraction.h come file di origine. Non è, è un file di intestazione.

Anche quasi certamente si vuole lanciare in -framework Foundation. Se usi altri framework probabilmente dovrai specificare anche questi.

Problemi correlati