Windows で nim 0.20 を使う (mingw / Visual Studio 両対応)


Windows に nim 0.20 をインストールして使う手順を、mingw だけでなく、Visual Studio (VC++) を使う場合についてもまとめておきます。

nim 本体のインストール

基本的には公式の Windows ダウンロード/インストールページの通りです。

ただ、私は普段は VC++ を使いたいので、finish.exe というコマンドは利用したことがなく、こんな感じでインストールしています:

  • nim-0.20.0_x64.zip(32 ビット OS なら nim-0.20.0_x32.zip)をダウンロード
  • 上記 ZIP ファイルをどこぞに展開
  • nim-0.20.0 というトップディレクトリが作成される(以下これを $NIM_DIR と呼ぶ)
  • $NIM_DIR\bin%USERPROFILE%\.nimble\binPATH に追加

ちなみに、簡単なソースのコンパイルなど、nimble を使わない程度の作業ならば、$NIM_DIR\binPATH に追加してあれば OK です。

mingw を使う場合

同じく公式の Windows ダウンロード/インストールページ に記載されている

  • mingw32-6.3.0.7z
  • mingw64-6.3.0.7z

の適切な方をダウンロード&展開して、出来上がったディレクトリの binPATH に追加します。

これでコンパイルはできるようになっているはずです。

実際、nim の examples ディレクトリにある hallo.nim をコンパイルしてみると・・・

> nim c hallo.nim
Hint: used config file 'D:\(略)\nim\nim-0.20.0\config\nim.cfg' [Conf]
Hint: system [Processing]
Hint: widestrs [Processing]
Hint: io [Processing]
Hint: hallo [Processing]
CC: stdlib_io.nim
CC: stdlib_system.nim
CC: hallo.nim
Hint:  [Link]
Hint: operation successful (14097 lines compiled; 0.942 sec total; 15.906MiB peakmem; Debug Build) [SuccessX]

> hallo.exe
Hello World

無事コンパイルと実行が確認されました。

Visual Studio を使う場合

Visual Studio は既にインストールされているものとします。

Visual Studio を使ってコンパイルする場合は、 $NIM_DIR\config\nim.cfg をテキストエディタで開いて 11 行目あたりにある cc という変数の値を vcc に変更します。

cc = vcc

これによって、gcc の代わりに vccexe.exe というプログラムがコンパイラとして起動されるようになります。

vccexe.exe は、Visual Studio の C コンパイラ cl.exe の場所を探し、適切なものが見付かれば、実際のコンパイル処理を cl.exe に委譲します(見付からなければ当然コンパイルエラーになります)。

Visual Studio 2015 以前

Visual Studio 2015 までは、インストール時に VS*COMNTOOLS という環境変数が定義されていたので、vccexe.exe はこれらの環境変数から自動的に Visual Studio のビルド環境バッチファイルを見つけ出し、それを実行してから cl.exe を起動します。

なので、VS140COMNTOOLSVS120COMNTOOLS といった環境変数を敢えて削除していない限りは、Visual Studio の C/C++ コンパイラが自動的に検出されるはずです。

Visual Studio 2017 以降

Visual Studio 2017 からは、Visual Studio の複数のエディションをインストールすることを考慮してでしょうか、上述の VS*COMNTOOLS という環境変数が定義されなくなりました。

そのため、nim 0.20.0 の vccexe.exe は、Visual Studio 2017 や 2019 の C/C++ コンパイラを自動認識してくれません。

この場合は、次節で説明するように、ビルド環境用のバッチファイルを手動で起動し、その中で nim を利用するのがよいでしょう。

なお、Visual Studio 2017, 2019 も検出するように改良してプルリクを投げておきましたので、次の nim のリリースからは、Visual Studio 2017/2019 のコンパイラも自動認識されるようになると思います。

手動で cl.exe にパスを通しておく(VS バージョンに非依存)

Visual Studio にはビルド環境用のバッチファイル(vcvarsall.bat など)が用意されています。

それらのショートカットを使って、パスなどの環境変数が適切に設定された状態にしたコマンドプロンプトで nim を起動すれば、VS のバージョンに関係なく、問題なくコンパイルできるはずです。

↓こんなやつ

なお、Visual Studio の C/C++ ビルド環境については、別記事で詳しくまとめました。

興味のある方はそちらもご参照下さい。

「Visual Studio (up to 2019) のコマンドラインでの C/C++ コンパイル環境」