しらいとブログ

ネットで検索してもなかなか出てこないIT情報を独自にまとめています

WindowsでRacerのビルド(コンパイル)

2015/07/13 18:25
通常のビルドだと別途DLLが必要になることが発覚したためやり方を変えました。

RacerはRust言語の自動補完ツールです。(RACER = Rust Auto-Complete-er)

今のところRust言語の自動補完ツールはこのRacerしか無いようなので、エディタやIDEなどで自動補完を使うのであれば、このRacerを導入する必要があります。

このRacerの導入方法なのですが、現時点ではソースコード(プロジェクトファイル一式)での配布となっているので、自分でビルドしなければいけません。初心者には難しいかもしれません。

そこで、初心者向けのRacerのビルド方法をここに書いておきます。

1. Rustのインストール(必須)

RacerはRust言語で書かれているので、ビルドにRustコンパイラが必要です。自分のOSにあったものをインストールしましょう。バージョンに関してですが、Stable(安定)バージョンより、Nightly(開発)バージョンの方がコンパイル速度が速いのでオススメです。

今回紹介する方法では、インストール時にPATHを通す必要はありません。

ダウンロードはこちらから。https://www.rust-lang.org/ja-JP/install.html

2. gitの導入(任意)

RacerのソースコードGitHubで公開されているので、gitでソースコードの更新チェックとダウンロードが出来ます。別にgitが無くてもソースコードのダウンロードは出来るのですが、Racerのアップデートの度に毎回手動でダウンロードするのは面倒です。この後、gitを使わないやり方と使うやり方の両方を紹介しますが、gitを使うやり方では、更新チェック、ダウンロード、ビルドを自動化できるので、gitを導入することをオススメします。

その前に、既にgitが入っていないか確認してみてください。TortoiseGitを使っている人はmsysgitを自分でインストールしているはずです。また、GitHub for Windowsにはgitも入っています。(C:\Users\(ユーザー名)\AppData\Local\GitHub\PortableGit_(省略)\にあります。)

まだ入れていない人はWindows用のgit、msysgitを導入してみましょう。Portable版で十分です。7zを解凍できるツールで適当な場所に解凍してください。

ダウンロードはこちらから。https://github.com/msysgit/msysgit/releases

3. ビルド時の注意

ビルド方法を書く前に注意点があります。Racerのビルドにはメモリをたくさん使います。筆者の環境(Windows7の32bit(メモリ2GB)と64bit(メモリ8GB))でビルドしたところ、32bit版で1.4GB、64bit版で2.1GB使いました。メモリの少ない環境ではブラウザを閉じておくなど、メモリを空けておいた方が良さそうです。

4. ビルド(gitを使わないやり方)

まず、gitを使わない場合のやり方を書きます。まずはGitHubのracerのページを開きます。

https://github.com/phildawes/racer

右下の「Download ZIP」からソースコード一式をダウンロードし、適当なフォルダに解凍します。

次にバッチファイルを作ります。

set PATH=D:\Rust nightly 1.3\bin
cargo rustc --release --bin racer -- -C link-args=-static
pause

1行目のRustのパスは自分の環境に合わせて修正してください。このバッチファイルを先ほど解凍したフォルダの中に入れて実行します。ビルドには時間がかかるのでしばらく待ってください。筆者は8分かかりました。「続行するには何かキーを押してください . . .」と表示されたらビルド終了です。実行ファイルはtarget/releaseに出来上がっています。

Racerのアップデートがあった時は新しいソースコードをダウンロードして上書きし、再度ビルドしてください。差分コンパイルが行われるので前回よりも早く終わるはずです。

4. ビルド(gitを使うやり方)

まずバッチファイルを作ります。

set PATH=D:\PortableGit-1.9.5-preview20150319\cmd;D:\Rust nightly 1.3\bin
git clone https://github.com/phildawes/racer.git
cd racer
cargo rustc --release --bin racer -- -C link-args=-static
pause

1行目のgitのパスとRustのパスは自分の環境に合わせて修正してください。このバッチファイルを実行すると、バッチファイルを実行したフォルダにracerフォルダが作られ、その中にracerのソースコードがダウンロードされ、そのままビルドが始まります。ビルドには時間がかかるのでしばらく待ってください。筆者は8分かかりました。「続行するには何かキーを押してください . . .」と表示されたらビルド終了です。実行ファイルはracer/target/releaseに出来上がっています。

5. アップデート(gitを使った場合のみ)

あらかじめバッチファイルを作っておきます。

set PATH=D:\PortableGit-1.9.5-preview20150319\cmd;D:\Rust nightly 1.3\bin
cd racer
git checkout .
git pull
cargo rustc --release --bin racer -- -C link-args=-static
pause

1行目のgitのパスとRustのパスは自分の環境に合わせて修正してください。このバッチファイルはビルドの時と同じ場所に置きます。このバッチファイルを実行すると、ソースコードを自動で最新のものにしてからビルドし直します。差分コンパイルが行われるので、更新が無ければ何もせずに終わるはずです。

※以前紹介していた方法では別途DLLが必要になる可能性がある

以前紹介していた方法では
cargo rustc --release --bin racer -- -C link-args=-static
ではなく
cargo build --release
を使っていました。

以前のやり方の方が一般的なビルド方法なのですが、その方法だと、32bit環境でRacerを実行した時に

コンピューターに libgcc_s_dw2-1.dll がないため、プログラムを開始できません。
この問題を解決するには、プログラムを再インストールしてみてください。

というエラーが出る可能性があります。

これはRustのbinフォルダにパスを通すか、Rustのbinフォルダに入っているlibgcc_s_dw2-1.dllをracer.exeと同じ場所にコピーすれば問題なく動きます。

実はRacerに限らずRustで作られた実行ファイルは実行時にこのDLLが必要になります。つまり、Rustでコンパイルした実行ファイルを配布する場合はこのDLLも一緒に配布する必要があるのです。

ですが、このDLLを実行ファイルに埋め込む方法もあります。その一つが今回使ったやり方です。GCCに-staticを渡すようなオプションを付けているので、必要なGCCのDLLが全て埋め込まれます。ちなみに-mwindows(Windowsで実行した時にコマンドプロンプトが開かれるのを防ぐためのオプション)なども渡せます。

他にもNightlyバージョンで使える機能にあるLink argsを使う方法もあります。ただし、こちらのやり方はソースコードを修正する必要があるので、今回のように頻繁にバージョンアップする場合はお勧めしません。