ClangをWindowsで動作させる方法を探していましたが、問題があります。 Clangを正常にコンパイルできますが、プログラムをコンパイルしようとすると、標準ヘッダーに多数のエラーがあります。
rubenvbの優れたビルド済みバージョンのclang を知っていますが、自分でコンパイルしたいです。また、clangについてのGoingNativeの話を聞いていましたが、clangにはWindowsのサポートがまだ十分ではないと言われていました。 Windowsでclangを動作させるにはどうすればよいですか?
次の方法を使用してWindows 7でC++のclangをコンパイルしましたが、Mysticialなどによって検証されています。
コマンドcmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
を実行します
(最後の引数は、llvmソースが含まれるフォルダー(およびtools/clangサブディレクトリのclangソース)への相対パスです)
これは、「configure」コマンドと同等の処理を行い、メイクファイルとすべてがビルドフォルダーに生成されます。
コマンドmingw32-make
を実行します
-j<number>
オプションを追加することで高速化を試みることができます)他のすべてのプログラムを閉じて、コンピューターが集中できるようにし、長いコンパイルプロセスを妨げないようにすることをお勧めします。コンパイラが書き込み中のフォルダーにロックをかけること(それは私に起こりました)。生成されたファイルをスキャンして邪魔にならないように、ウイルス対策ソフトウェアとファイアウォールソフトウェアをオフにしました。テストする時間
Build/binフォルダーに.cppファイルを作成します(hello.cppを使用します)。標準ライブラリヘッダーを使用して、インクルードパスとライブラリが機能していることを確認します。非常に単純なプログラムから始めます。
(私が始めたもの:
#include <iostream>
int main() {
std::cout << "hi";
}
)
コマンドclang hello.cpp -std=c++0x -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++" -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++\mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
を実行します
(-Lはライブラリを検索するディレクトリを指定し、-lはリンクするライブラリを指定します)(MinGWを私と同じパスにインストールしていない場合、コマンド「g ++ somefile。」でパスを見つけることができます。 cpp -v "を使用して、g ++にライブラリパスやライブラリファイルなどに使用しているオプションについて勇気を出します。-Lおよび-lオプションの出力の終わり近くを検索します。oファイルに注意してください-Lが散在する名前。Clangはg ++と同じオプションの多くを使用するため、g ++の出力からその行を文字通りコピーして貼り付けました)
これにより、プログラムがコンパイルされ、a.outという名前のファイルが生成されます。
a.outの名前をa.exeなどに変更します
Clang(3.0)にはWindowsでまだいくつかの問題があります(これらの問題がLinuxでも発生するかどうかはわかりません)。たとえば、ラムダ(clangはサポートしていません)を-std = c ++ 0xでコンパイルすると、clangがクラッシュし、診断エラーが発生します。 (LLVMで通知されましたIRCこれは、clangがラムダの解析を実装しているが、セマンティック分析ではなく、クラッシュするフェーズであるためです(3.0のラムダ解析を無効にするのを忘れていたため)リリース)、そして彼らはすでにこのバグについて知っています)
また、著名な神秘主義者はこのガイドをテストすることに親切に同意し、彼のテスト中にいくつかの観察を行いました。
ここにWindows 8.1で私の環境で働いたものがあり、全体的にSethの指示に似ていますが、より新しいツールを使用しています。
C:/MinGW
にインストールしました。正確に言うと STLのディストリビューション です。cmake -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE_BUILD_TYPE=Release ..\llvm
(何らかの理由でCMakeが自動的に「make」を見つけることができませんでした)#include <iostream> int main() { []{ std::cout << "hi"; }(); }
set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;%PATH% clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include" -I"C:/MinGW/include/c++/4.9.1" -I"C:\MinGW\include\c++\4.9.1\x86_64-w64-mingw32" -I"C:\MinGW\x86_64-w64-mingw32\include"
何が機能しなかった:
cmake -G "Visual Studio 12" ..\llvm
を実行してからVisual Studioでソリューションをコンパイルする必要があることです。ただし、Clangはサンプルcppのコンパイルに失敗し、MinGW標準ライブラリヘッダー内の「宣言されていない識別子 'char16_t'」および「__int128はこのターゲットではサポートされていません」について不平を言いました。 clang-clおよびMS STLヘッダーを使用すると、「throw x(y)」指定子について文句を言います。ビルドにいくつかの追加キーを提供する必要があったかもしれませんが、機能させることができませんでした。C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\xiosbase(293,4):エラー:このスロー式はまだコンパイルできません_THROW_NCEE(failure、 "ios_base :: eofbit set"); C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\xstddef(56,30):注:マクロ '_THROW_NCEE'から展開#define _THROW_NCEE(x、y)throw x(y)
参照 http://clang.llvm.org/get_started.html#buildWindows
「Visual Studio 11 Win64」とcmakeを使用し、現在利用可能なVS Express for Desktopで動作しました。
また、libにはMinGW-W64を使用し、欠落しているファイルにはSUAを使用しています。 http://mingw-w64.sourceforge.net/ および http://www.suacommunity.com/
W64バイナリで使用するためにclang ++でコンパイルされた.oをリンクするには、W64成果物。
VSを使用してLLVMとclangを構築し、Unixユーザーであるため、コマンドラインからソースを構築することを好みます。
Seth Carnegieの指示に従って、MinGW v4.5.2でLLVM v3.3を使用して、提供されたパッケージではなくSVNリポジトリからビルドしました。