4クロックで支度しな

脊髄反射で思ったことを書き垂れます。68060とか名乗っときながら4クロックはヌルいとか言わないで。

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 ...
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%
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%

・・・うん、分かる人には既に分かっているし、知りたい人には分からないような例ですな(汗
Win32Win64のどちらのバージョンをビルドするかで、 eclipse_cdt_mingw32.bat と eclipse_cdt_mingw64.bat を使い分けられたし(Eclipseを起動してから変更するとか、器用なことは出来ない)。