コマンドラインから VC++ のコンパイラ (cl.exe) を使用する

以前に参考にしていた記事が消えていたのでまとめておきます.

GUI など VC++ 固有の機能を特に使用することなく,標準ライブラリ(+α)のみを利用して C++ のコードを書く際には,糞重い IDE を起動したくない わざわざ新規プロジェクトを作成せずにコンパイルだけ行いたい,と思うことがよくあります.ここでは,そんなときのために cmd.exe や cygwin などのターミナルから直接 cl.exe を叩けるように環境を整えることを考えます.

Visual C++ のインストール

まずは VC++ のインストール.最も手軽な方法は,http://www.microsoft.com/japan/msdn/vstudio/express/ からダウンロードしてインストールする事でしょうか.ここは,特に問題になる事はないと思います.

環境変数の登録

次に,ターミナルから cl.exe を叩けるように PATH 他の環境変数を登録します.登録すべき環境変数の一覧は,Visual C++ インストールフォルダ下の Common7\Tools\vsvars32.bat に記載されてあります.私の環境では,以下のように記載されてありました(Program Files (x86) になってるのは 64bit OS だからか?).

@set PATH=C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools;C:\Windows\Microsoft.NET\Framework\v3.5;C:\Windows\Microsoft.NET\Framework\v2.0.50727;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\VCPackages;%PATH%
@set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE;%INCLUDE%
@set LIB=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\LIB;%LIB%
@set LIBPATH=C:\Windows\Microsoft.NET\Framework\v3.5;C:\Windows\Microsoft.NET\Framework\v2.0.50727;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\LIB;%LIBPATH%

それぞれ PATH, INCLUDE, LIB, LIBPATH と言う環境変数を作成して登録します(PATH は,既存の PATH の末尾に追加).登録が終了したら一応再起動(ユーザのリログイン?)をした方が良いかもしれません.

Microsoft Platform SDK Windows SDK のインストール

この時点でコンパイルしてみて成功すれば,これ以降の操作は不要です.

コンパイルを行ってみると,以下のようなエラーが発生する事があります.

[example]$ cl /EHsc hello.cpp
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

hello.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:hello.exe 
hello.obj 
LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。

Microsoft VC++ 2008 Express Edition の場合,Microsoft Platform SDK と呼ばれるライブラリがインストールされていないそうです.上記のエラーが発生した場合には,Microsoft プラットフォーム SDK で Visual C++ Express Edition を使用する - MSDN にしたがって Microsoft Platform SDK をインストールします. 追記 リンク切れの指摘がありました.現在は,Microsoft Windows SDK から取得できます.

インストールが終了したら,リンク先の記事に書かれてあるパスを PATH, INCLUDE, LIB のそれぞれの環境変数に追加します.ただし,インストールフォルダ名は,リンク先に書かれているパスとは異なる場合があるようです.ちなみに,私は以下のようなパスでした(上から順に PATH, INCLUDE, LIB).

C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin
C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib

追加したら,また念のために再起動(リログイン).

Hello, world!

#include <iostream>

int main(int argc, char* argv[]) {
    try {
        std::cout << "Hello, world!" << std::endl;
    }
    catch (...) {
        std::cerr << "Error!" << std::endl;
        std::exit(-1);
    }

    return 0;
}
[example]$ cl /EHsc hello.cpp
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

hello.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:hello.exe 
hello.obj 

[example]$ ./hello
Hello, world!

以上で設定終了.cl.exe では,C++ 標準の例外を使用する場合には /EHsc オプションを指定する必要があるようなので,そのテストも兼ねています.