2013-05-08 17 views
7

うまくいけば簡単な質問です。私はclangを使ってコマンドラインから基本的なObjective-Cコンパイルを学びたいと思っています。私はXcodeが複雑なプロジェクトのためのより優れたソリューションであることを理解しています。私はすぐにそれに移行するつもりですが、個人的には、ターミナルで手動でコンパイルできれば言語をよく理解しています。新しいプロジェクトを開始するよりも、端末でコンパイルするのが面倒です。コマンドラインで複数のObjective-Cファイルをclangでコンパイル

質問:私はどのように(コマンドラインから)複数のファイルで構成されるObjective-Cプログラムをコンパイルするのですか? (私は、Kochanの教科書の第7章から、#import "Fraction.h"と、FoundationフレームワークをインポートするFraction.hファイルの両方のmain.mとFraction.mファイルを使って分数プログラムを実行しようとしています)。

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

場合、私は:私は

clang -fobjc-arc main.m -o prog1 

のようなものを使用しかし、私はそれを入力し、私はプロジェクト内のmain.m以外のファイルを含めたい場合は、私を含むエラーが発生します1つのファイルをコンパイルするには追加のファイルを引数としてコマンドに追加してみてください。

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

その後、私は

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

を取得し、私はそれから

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

よう-o引数を削除した場合、私はすべて最終的には致命的「で終わる、Foundationフレームワークを参照するエラーの巨大な山を取得エラー:非常に多くのエラーが発生し、現在停止しています。 "

どのようにして動作させるにはどうすればよいですか?あるいは、複数のファイルが関わるとすぐにそれを吸い込み、Xcodeを使用する必要がありますか?

+3

コンパイラの引数としてインクルードファイル "Fraction.h"を指定すると、1つのエラーが発生します。 –

+1

ああ!ありがとう。それだけです。.mファイルでなければならず、.hファイルではありません。 –

答えて

6

のみ実装ファイル(* .M)にコンパイルされている、いないインターフェイス/ファイルを含め、これは動作するはずです:

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

「複数の出力ファイルを生成する」奇妙なエラーメッセージおそらくによって引き起こされます事実 は、 "precompiled header files"にヘッダファイルをコンパイルすることもできます。

+0

-fobjc-arcは、従来のランタイムを使用しているプラ​​ットフォームではサポートされていません。 –

+0

@AbdennourTOUMI:正しいです。しかし、*この*質問は、コマンドラインでObjective-Cコード*をARC *でコンパイルする方法に関するものでした。それ以外の場合は、そのオプションを省略します。 –

+0

いいえ、いいえ、これは、私がこれらのファイルをコンパイルしようとしたときに表示されるエラーです.Ubuntuの下にあるhttps://github.com/macmade/host-manager/tree/master/source ...私はLINUXの下でこれらのファイルをコンパイルする方法を私に説明すると感謝してください。 –

2

Fraction.hをソースファイルとして指定しないでください。それはヘッダファイルではありません。

-framework Foundationもほぼ確実に投げたいと思います。他のフレームワークを使用している場合は、おそらくこれらも指定する必要があります。

関連する問題