4

これと同様の質問があります、私は答えに満足していません。

クランをインストールしてみました。clangをインストールしようとした後、2つのclangになりました。1 つは /usr/bin/clang または clang++ で、もう 1 つは /opt/local/bin/clang-mp-3.3 または clang++-mp-3.3 (macport からインストールしたもの) です。

単純なプログラムをコンパイルするときは同じように動作しますが、他の大きくて複雑な C++ コードをコンパイルしようとすると、動作が異なります。概要をつかむためにドキュメントを読んでみました。

このチケットから、 macport clang がより gcc に近いことがわかりました。私は、clang がフロントエンドの仕事 (c 型言語インタープリターとして) を行い、llvm がバックエンドであることを知っています。そもそも違いは何で、どのようにして生じたのですか?お時間をいただきありがとうございます。

4

1 に答える 1

1

TL;DR : llvm リリースに関して十分に近い場合、それらは同様に動作するはずです (おそらく、そのうちの 1 つに最適化/機能が追加されます)。しかし、あなたの言いたいことを知るために使用できる情報はありません。

Portfileから見たものから、 {llvm,clang}-3.4 ポート (および他の同様のポート) はプレーンな llvm および/または clang をインストールします。

例: 最新のリリースされた Xcode には、次のものが付属しています。

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.2.0
Thread model: posix

Apple は特定のリビジョン番号を教えてくれませんが、2013 年半ばから 2014 年初頭の間にトランクから分岐した llvm のリビジョンに基づいてプライベートの clang が作成されたことはわかっています。

また、「macport clang の方が gcc に近い」という意味もわかりません。これは意味がないように思えますが、誤解している可能性があります。Apple の clang はメインラインの clang、AFAIK にかなり近いです。彼らには、未知のリビジョンに基づいたリリースがありますが、それでもまだです。

Clang はllvm プロジェクトの C フロントエンドですこれは llvm コミュニティによって運営されており、すべての (パブリック) 作業はメインの llvm リポジトリ (clang のディレクトリ) で行われます。ただし、clang を使用せずに llvm をインストールしたり、他の llvm ユーティリティを (ほとんど?) 使用せずに clang をインストールしたりすることはできます。これが、macports で clang と llvm 用に別々のパッケージを用意している理由です。

なぜ彼らは異なる振る舞いをすると言いますか、そして彼らはどのように異なる振る舞いをしますか? 同じオプションでコンパイルしていますか?どれ?3.3 と 3.3svn のように、それらは両方とも同じリリースのものですか (これは、それらの間にせいぜい約 6 か月しかないことを意味し、まったく同じバージョンにはなりません)?

于 2014-06-12T05:14:03.743 に答える