Eclipse CDTで複数のMinGW環境を使い分ける(Windows)
悲しい出来事
Haskell Platform 2014.2.0.0をWindows7 Pro 64bitにインストールしたら、どうも内部でMinGWを使っている&環境変数PATHに登録してしまうようで、EclipseのCDTがこれをデフォルトのMinGW環境と認識してしまう模様。
で、既に入れてあったMinGW32/MSYSと、MinGW-w64を選択しようとしても、選択肢すら出てこない。
これを回避可能にするために、バッチファイルで対処してみたと言う話。
何をどうしたか
ひとまず、
- 環境変数PATHにHaskell Platform同梱のMinGWへのパスが通っているのはまずい
- Eclipseが起動するためには、JREへのパスが通っていないといけない
- 環境変数CPATH、CPLUS_INCLUDE_PATH、LIBRARY_PATH辺りはバッチファイルで設定する(Eclipseの環境設定ではしない)
- Win32用とWin64用のどちらをビルドするか選択したい
- その際、共通化できるものはしておきたい
- MinGWのアップグレードなどに対応しやすくしたい(同じ設定を複数ファイルに書かない)
ので、バッチファイルをWin32環境用とWin64環境用に分け、さらにそれぞれを3つのバッチファイルから構成する。
├┬ Win32用
│├ ○メインのバッチファイル eclipse_cdt_mingw32.bat
│├ ○環境変数PATH設定用(Win32/Win64共通部分) common_path.bat
│└ ○GCCの環境変数設定用 mingw32_gcc_envval.bat
└┬ Win64用
├ ○メインのバッチファイル eclipse_cdt_mingw64.bat
├ ○環境変数PATH設定用(Win32/Win64共通部分) common_path.bat
└ ○GCCの環境変数設定用 mingw64_gcc_envval.bat
以下、バッチファイルの例。
- common_path.bat
rem 後で更新することを考えて、パスを1つずつ追加していく rem これは個人的な設定の例です set PATH=C:\bin set PATH=%PATH%;C:\bin32 rem Windowsのコマンド類用 set PATH=%PATH%;%SystemRoot%\system32 set PATH=%PATH%;%SystemRoot% set PATH=%PATH%;%SystemRoot%\System32\Wbem set PATH=%PATH%;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\ rem JDK8u45では、以下のパスにJREの実行ファイルへのショートカットがインストールされる(それ以前のバージョンについては未調査) rem Eclipseが起動するためには必須 set PATH=%PATH%;C:\ProgramData\Oracle\Java\javapath rem ...
- eclipse_cdt_mingw32.bat
rem まず共通のパスを設定 call common_path.bat rem MinGW32独自のパス設定 rem ※バッチファイル内と環境変数で記述順が逆になるのに注意 rem おまけ:AMDのAPP SDKとか使っている人向け set PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\bin\x86;%PATH% set PATH=C:\opt\APPSDK\AMD APP SDK\2.9-1\bin\x86;%PATH% set PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\bin\x86;%PATH% rem MinGW32用のパス設定を追加 rem 具体的なパスは各自のインストール先フォルダの設定とか参照してください(これはかなり独自の設定なので) set PATH=C:\opt32\MinGW\bin;%PATH% set PATH=C:\opt32\MinGW\msys\1.0\bin;%PATH% set PATH=C:\opt32\MinGW\msys\1.0\local\lib;%PATH% set PATH=C:\opt32\MinGW\msys\1.0\local\bin;%PATH% rem GCC周りの環境変数を設定 call mingw32_gcc_envval.bat rem Eclipseを起動 rem ※このバッチファイルはEclipseのインストール先フォルダに置かれている start eclipse.exe
- mingw32_gcc_envval.bat
rem GCC周りの環境変数を設定 rem PATHと同じく、変更に対応しやすいよう1個ずつ設定 rem ※バッチファイル内と環境変数で記述順が逆になるのに注意 set CPATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\include set CPATH=C:\opt32\MinGW\mingw32\include;%CPATH% set CPATH=C:\opt32\MinGW\lib\gcc\mingw32\4.8.1\include;%CPATH% set CPATH=C:\opt32\MinGW\include;%CPATH% set CPATH=C:\opt32\MinGW\msys\1.0\include;%CPATH% set CPATH=C:\opt32\MinGW\msys\1.0\local\include;%CPATH% set CPLUS_INCLUDE_PATH=C:\opt32\MinGW\lib\gcc\mingw32\4.8.1\include\c++ set LIBRARY_PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\lib\x86_64 set LIBRARY_PATH=C:\opt32\MinGW\mingw32\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt32\MinGW\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt32\MinGW\lib\gcc\mingw32\4.8.1;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt32\MinGW\msys\1.0\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt32\MinGW\msys\1.0\local\lib;%LIBRARY_PATH%
- eclipse_cdt_mingw64.bat
rem まず共通のパスを設定 call common_path.bat rem MinGW-w64独自のパス設定 rem ※バッチファイル内と環境変数で記述順が逆になるのに注意 rem おまけ:AMDのAPP SDKとか使っている人向け set PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\bin\x86_64;%PATH% set PATH=C:\opt\APPSDK\AMD APP SDK\2.9-1\bin\x86_64;%PATH% set PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\bin\x86_64;%PATH% rem MinGW-w64用のパス設定を追加 rem 具体的なパスは各自のインストール先フォルダの設定とか参照してください(これはかなり独自の設定なので) set PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\bin\x86_64;%PATH% set PATH=C:\opt32\MinGW\msys\1.0\bin;%PATH% set PATH=C:\opt32\MinGW\bin;%PATH% set PATH=C:\opt32\MinGW\msys\1.0\local\bin;%PATH% set PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\opt\bin;%PATH% set PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\bin;%PATH% set PATH=C:\usr\local\lib;%PATH% set PATH=C:\usr\local\bin;%PATH% rem GCC周りの環境変数を設定 call mingw64_gcc_envval.bat rem Eclipseを起動 rem ※このバッチファイルはEclipseのインストール先フォルダに置かれている start eclipse.exe
- mingw64_gcc_envval.bat
rem GCC周りの環境変数を設定 rem PATHと同じく、変更に対応しやすいよう1個ずつ設定 rem ※バッチファイル内と環境変数で記述順が逆になるのに注意 set CPATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\include set CPATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\opt\include;%CPATH% set CPATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\opt\lib\libffi-3.1\include;%CPATH% set CPATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\lib\gcc\x86_64-w64-mingw32\4.9.2\include;%CPATH% set CPATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\x86_64-w64-mingw32\include;%CPATH% set CPATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\include;%CPATH% set CPATH=C:\usr\local\include;%CPATH% set CPLUS_INCLUDE_PATH=C:\usr\local\include\boost-1_58 set CPLUS_INCLUDE_PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\x86_64-w64-mingw32\include\c++;%CPLUS_INCLUDE_PATH% set LIBRARY_PATH=C:\Program Files (x86)\AMD APP SDK\2.9-1\lib\x86_64 set LIBRARY_PATH=C:\usr\local\lib;C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\x86_64-w64-mingw32\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\opt\lib;%LIBRARY_PATH% set LIBRARY_PATH=C:\opt\mingw-w64\x86_64-4.9.2-posix-seh-rt_v4-rev2\mingw64\lib\gcc\x86_64-w64-mingw32\4.9.2;%LIBRARY_PATH%
・・・うん、分かる人には既に分かっているし、知りたい人には分からないような例ですな(汗
Win32とWin64のどちらのバージョンをビルドするかで、 eclipse_cdt_mingw32.bat と eclipse_cdt_mingw64.bat を使い分けられたし(Eclipseを起動してから変更するとか、器用なことは出来ない)。