LLVM Clang の Windows へのインストールと使い方

C, C++ 言語のコンパイラーといえば、 Windows では Visual Studio 、 Unix 系では gcc(g++) というのが多いです。 そんな中、最近 Clang があちこちで使われ始めるようになってきました。
今回はこの Clang の Windows へのインストール方法と使い方について説明します。

Clang とは

ClangLLVM で作られた C, C++, Objective-C, Objective-C++ のコンパイラーです。 LLVM(Clang) の開発には Apple や Google などの企業も参加、資金提供しています。
Clang はgcc の代替を狙っており、 Apple の後押しが大きく、 Mac ではすでに主要なコンパイラーとなっているらしいです。さらに Mac だけでなく、Unix や Windows などクロスプラットホームで使われるようになってきました。

因みに Clang の発音は「クラン」が近いみたいです。 最後の g は HongKong(香港)や Erlang(アーラン)のように日本人にはほとんど聞き取れない音です。

Clang を使うメリット

Clang のメリットとしてよく言われるのが、エラーメッセージが分かりやすいという点です。
C++ では STL などのテンプレートを使った際のコンパイルエラーのメッセージがわかりづらく、 メッセージを見ても、どこが悪いのか、どう直せばいいのかわからないといったことが発生します。 それが解消されるということです。

ただ、個人的には Visual Studio のエラーメッセージと違い、英語になってしまうので、 それはそれでつらいかなとは思います。

Clang が広まる意義

前節のメリットを聞いても、そこまで「よし、 Clang に変えよう」と思う人は少ないかもしれません。 しかし、 Clang が広く使われるようになることの意義は単に C++ のコンパイラーの選択肢が増えるということに留まりません。

それは LLVM がコンパイラー基盤といって、これが実はかなり有益な仕組みであるためです。 Clang は正確にいうと LLVM のフロントエンドプログラムにあたります。 LLVM については上記の記事に説明を書いているので、 ここでは簡単に説明します。
LLVM では仮想マシン(VM)のようにソースの解析後、一旦中間コードにします。 それを LLVM が提供する機能を使って、 最適化実行ファイルの生成 を行います。

フロントエンドは最初のソースの解析から中間コードへの変換を主に担当し、 その C++ 用のものが Clang です。
vm_llvm.png



Clang がエラーメッセージがいくら分かりやすくなっているからといっても、 やはり gcc の最適化の能力と広く移植されている点はすごいものです。 gcc は多くの人が長い時間を書けて作っているのですから、それも当然です。

Clang も広く使われるようになり、開発が進んで、 gcc と同等の最適化や移植性をもつことを想像してみてください。
Clang がその能力を持つということは LLVM で提供している最適化や移植性が同等になることを意味します。 新しい言語を作ろうと思った場合、一人で gcc ばりの最適化や移植は不可能です。 しかし、 LLVM では中間コードを生成するところまで作れば、 その能力を手にしたコンパイラーを作ることができます。

Microsoft や Google といった大企業や GNU のような大きなコミュニティーでなくてもいいわけですから、 一人のセンスのいいプログラマーがいれば、優れたコンパイラーをもった言語ができます。 素晴らしい言語が次々生まれる予感がして、 言語好きとしてはワクワクしてしまいます。

C++11, C++14 対応

そうしたわけで、 Clang はぜひ広まって欲しいと思っています。 ただ、「では自分は」というと、いろんなシガラミもあり、そうそうコンパイラーを変更することはできません。
しかし、 Clang はもう一つ大きな利点があります。 それは Clang がいち早く C++11, C++14 に対応した点です。 C++14 を一足先に試してみたいということで Clang を使ってみました。

C++ の言語仕様は長らくあまり変わっていなかったのですが、 C++11 で大きな機能追加があり、 C++14 でその補足的な機能追加がありました。
C++14 の 14 は 2014 年のことで、つい最近です。 C++11 の変更が大きく、他のコンパイラーがその対応もおぼつかない中、 C++14 の対応は異常だと感じるほどでした。

ただ、この利点はしばらくしたら、なくなってしまう利点です。 実際、 GCC も最近 5.1 で C++11 に完全対応し、実験的位置づけですが C++14 にも対応しました。
とはいえ C++17 など C++ の今後もっとよくなっていく気配を感じると Clang の対応の早さは期待が持てます。

因みに Visual Studio に関しては C++11 もまだまだという感じです。

gcc 互換か VS 互換か

Clang は gcc 互換を目標に開発されていますが、 同様に Visual Studio (Visual C++)互換も開発されています。

VS での C++ のコンパイルには内部で cl.exe を使用しています。 これと互換の clang-cl があります。
ただし、 clang-cl では C++11/14 への対応も cl に合わせているため、 C++14 対応の恩恵は得られません。


この記事では gcc 互換、 VS 互換の両方を解説していきます。

インストール

事前準備

gcc 互換 として使用する場合は MinGW (Windows 用 gcc) のインストールが必要です。
Clang は gcc を置き換えて使うようになっています。 Clang をインストールしてもコンパイラーと Clang 専用のヘッダー、ライブラリーがインストールされるだけで、 iostream のヘッダーすらインストールされません。 それらの基本ライブラリーは gcc のものを使うため、 MinGW のインストールが必要となります。

MinGW のインストールに関しては以前の記事を参考にして下さい。
なお、 インストール先のフォルダーはデフォルト(C:\MinGW)から変更してはダメです。 変更するとclang はヘッダー等を見つけられなくなります。 VS 互換 の場合には Visual Studio があらかじめインストールされている必要があります。

ダウンロード

LLVM のダウンロードサイトから Windows 用のバイナリーをダウンロードします。 lang_clang_dl.png

ダウンロードされるファイルは LLVM-X.X.0-win32.exe というインストーラーです。 clang ではなく LLVM という名前ですが、ちゃんと Clang がインストールされます。

インストール

インストーラーを実行するとウィザードが表示され、それに従えばインストールは完了します。

この際、実行ファイルの場所を環境変数 PATH に追加するかどうかの選択があるので、 ここは追加するようにしておきましょう。

lang_clang_inst.png

あと変えるとしたら、インストール先のパスぐらいではないでしょうか。

lang_clang_inst_path.png




なお、 VS をインストールしていないか、バージョンが古い(.NET 4.0 以上に対応していない)場合、 コンソールのエラーが出て止まります。 これは [Enter] を押せば、閉じて継続します。

lang_clang_vs.png

gcc 互換として利用する場合は関係ないので、特に気にする必要はありません。
後から VS 互換を使いたいといった場合は VS のインストール後、 (インストール先フォルダー)\tools\msbuild\instal.bat を実行して下さい。失敗したインストール処理を行います。

使い方

gcc 互換

gcc 互換の場合は、 gcc をそのまま置き換えれるようになっているので、 使い方は gcc と同じです。
各実行ファイルの対応は次の様になっています。

機能 GCC Clang
C コンパイラー gcc clang
C++ コンパイラー g++ clang++


例えば、 C++14 規格でコンパイルする場合は次のようになります。

hello.cpp :
#include <iostream>

int main()
{
    std::cout << "Hello world!" << std::endl;
    return 0;
}
~/lang/cpp $ clang++ -std=c++1y hello.cpp 
~/lang/cpp $ ./a.exe 
Hello world!
gcc の基本的な使い方についても MinGW の記事をご覧ください。 なお、 C++14 規格でコンパイルするためのオプションは正しくは -std=c++14 です。 しかし、このオプションをつけると clang++ から呼び出される g++ のエラーが発生します。
最初に GCC は C++14 に対応したと書きましたが、 MinGW の GCC のバージョンは少し遅れていて、 ちゃんと C++14 を試すためにはもう少し待つ必要があります。


ここでは基本的なコンパイルのやり方しか示しませんが、本格的なアプリを作る場合には Autogen のようなビルドツールを使うことになります。
Unix 系のビルドツールの場合は C コンパイラーは CC 、 C++ コンパイラーは CXX の変数で定義されていることが多いです。 その場合は CC=clang 、 CXX=clang++ という様に変更すれば、 Clang が使用されます。

VS 互換

VS 互換の場合は C++ のプロジェクトファイル(vcproj) のプロパティー画面を表示し、 [プラットホームツールセット] の項目で [LLVM-vs20XX] を選択します。

lang_clang_vs.png

この選択ができるようになっているのは、インストール時にツールセット用のファイルを作成したためです。 先ほど書いたコンソールのエラーは、この作成に失敗すると出ます。
ツールセットを設定し、プロジェクトをビルドすれば、コンパイルに clang-cl が使われるようになります。
ただし、 clang-cl の場合、 iostream のヘッダーをインクルードするとコンパイルエラーとなり、 Hello world すら作れません。 printf を使えば作れるのですが、 VS 互換に関してはまだまだといった感じです。


関連記事
Prev.    Category    Next 

Facebook コメント


コメント

No title

clang: error: linker command failed with exit code 1が出てしまいました。何がいけないんでしょうか

No title

この通りの手順でインストールしてもiostream file not foundが出てしまうんですよねえ…
海外掲示板でも報告されてますけど確実な方法が存在してませんし...

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
114位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
15位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

12月 | 2025年01月 | 02月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。