Window上のMSYS2を用いたOpenGLの開発で,MacやLinuxとのクロス開発を目指すとき以下のツールがあるとよいようです.
MSYS2について
開発環境のほとんどはMSYS2とそのパッケージ管理システム(pacman
)を用いてインストールできます.以下に主なシステムと利用目的を列挙します.
- MSYS2
- 擬似的なUnix環境,及びコンパイラ基盤です.
pkg-config
- ソフトウェアAPIの利用方法を記述した標準的なデータベースです.これを利用することで,汎基盤開発がかなり楽になります.
automake-wrappter
- automake などを含む伝統的な開発環境設定ツールです.私は直接的には使っていませんが,ダウンロードしたソースコードをビルドするときに必要になることがしばしばあります.
git
- バージョン管理システム
make
- 標準的ビルドツール
cmake
- 汎基盤ビルドツール
gcc
- 標準的Cコンパイラ.C++のコンパイラも含んでいます.MSYS2にはもっと現代的なclang/LLVMコンパイラ群も提供していて,本当はそちらを利用したかったのですが,
clang++
のC++11規格への対応が不十分そうだった(まじめに確認したわけではないけど)のでさっさと諦めました.glfw
- OpenGLの文脈を生成するための小さなライブラリ
glm
- OpenGLを用いたグラフィックスに必要な数学ライブラリ.OpenGL Shading Language (GLSL) 標準に類似したAPIを提供しています.
nodejs
- JavaScriptエンジン.アプリケーションの環境設定やデータの入出力にJSON形式を採用したのですが,JSON形式のデータの生成に用います.
MSYS2のインストール
MSYS2のサイト
からダウンロードできる.インストールはほぼそのまま.インストール先は c:\msys2
としました.
c:\msys2\mingw64_shell.bat
を起動するとMSYS2環境が起動します.まずはMSYS2の基盤ソフトウェアを更新します.
pacman --needed -Sy zsh pacman pacman-mirrors msys2-runtime
つぎに,MSYS2をいったん終了してから,MSYS2を再起動してから,必要なソフトウェアをインストールします.
pacman -S mingw-w64-x86_64-toolchain
pacman -S msys/pkg-config
pacman -S msys/automake-wrapper
pacman -S msys/git
pacman -S msys/maka
pacman -S msys/gcc
- ???
pacman -S mingw64/mingw-w64-x86_64-make
pacman -S mingw64/mingw-w64-x86_64-cmake
- ???
pacman -S mingw64/mingw-w64-x86_64-gcc
pacman -S mingw64/mingw-w64-x86_64-glfw
pacman -S mingw64/mingw-w64-x86_64-nodejs
pacman -S mingw64/mingw-w64-x86_64-jsoncpp
chocolateyのインストール
chocolateyはWindows用のパッケージ管理システムです.3,000近くのソフトウェアが登録されており,MacのHomebrewやLinuxのapt/pacman/yumのようにコマンドを利用してソフトウェア管理ができるようになります.これで,あちこちの怪しげなサイトをうろついて,おっかなびっくりとソフトウェアをダウンロードする手間と不安から開放されます.Dropbox, Evernote, Google Chrome, Slack, SmartGit/Hg などもインストールできます.
インストール方法は,https://chocolatey.org
にしたがって下さい.cmd.exe
を管理者権限で実行して,インストールコマンドを実行するだけです.cmd.exe
を管理者権限で実行する方法は,Windows-X A
です.
chocolatey を用いたソフトウェアのインストール
cmd.exe
を管理者モードで起動(Windows-x a)して,以下を実行するだけ.
-
choco install consolez
ターミナルエミュレータです.Console2というものがあったのですが,それの後継です.MSYS2もサポートしているようです.Console2 を起動するには
Windows-x r console
です.一度,起動すればタスクバーにピンすることもできます.
開発のためのWindowsの設定
Windowsがデフォルトで用意するホームディレクトリは,ExplorerやCmd.exeでアクセスするのに不便な場所にあるので,もっと便利な場所に作成してしまいましょう.
私はc:\wakita
というフォルダを使いそこをホームディレクトリとして用いています.
DropboxフォルダはデフォルトではWindowsのデフォルトのホームディレクトリに作成されてしまいます.これもc:\wakita
直下に作成した方が便利でしょう.Dropboxをインストールし,smartnova
のアカウントを追加するときに詳細なオプションで,c:\wakita
のような場所を指定するのが簡単です.デフォルトの場所に設定してしまった場合も,Dropboxの設定を開き,アカウント
→ smartnova → Dropboxの場所を指定することで設定を変更できます.
以下が私のディレクトリ構成です.
- c:
- wakita
- .profile
- Dropbox (smartnova)
- win
- bin
- doc
- downloads
- lib
- src — あちこちから入手したソースコード置き場
- work
- win
- wakita
c:\wakita\.profile
には以下のように記述します.
export DROPBOX="$HOME/Dropbox (smartnova)"
. "$DROPBOX/win/bin/profile"
環境変数の設定
Windows環境変数を設定するのはちょっと面倒な気がします.私が見つけたなかで一番簡単と思われる方法は以下です.(もっと効率的な方法があったら教えて!)Win+X P でコントロールパネルが開けます.ここでCtrl-F envで”env”について検索すると,「環境変数の編集」という項目が出てくるので,それをクリックします.
このウィンドウではユーザ環境設定とシステム環境設定を施すことができます.パソコンのユーザに固有の設定は前者に,後者はWindowsのシステム全体に関わる設定を施します.効果としてはどちらも同じなのですが,アプリケーションの設定はシステム環境設定に属し,自分の使い勝手を向上するためにはユーザ環境設定をすると思っていればいいでしょう.
以下のような設定をユーザ環境設定に追加して下さい.
-
HOME=c:\wakita
MSYS2(開発環境の対話的シェル)を起動したときに最初に開くディレクトリ
-
DROPBOX=%HOME%\Dropbox (smartnova)
Dropboxのありか -
PATH=%DROPBOX%\win\bin
個人ごとの設定に,$DROPBOX/win/binを追加する.個人的に作成したスクリプトの置き場を追加します.
ここまでの設定の確認
-
cmd.exe
を起動し,以下のコマンドを実行し,期待する値が設定されているか確認して下さい.echo %HOME% cd %HOME% dir echo %DROPBOX% cd %DROPBOX% dir echo %PATH%
-
cd
コマンドでエラーは出ませんでしたか? -
dir
コマンドの出力は問題なかったですか?私の環境だと,
c:\wakita
,"c:\wakita\Dropbox (smartnova)"
などが表示されます.
-
-
MSYS2は起動できますか?起動方法は
Windows-x r \msys2\mingw64_shell
です.うまくいけばターミナルウィンドウが表示されます.この方法では,MSYS2に標準のminttyというターミナルエディタが起動します.もっとお勧めの方法は,さきほどChocolateyを使ってインストールしたConsolezから起動する方法です.その方法については後述します.ひとまず,ここではmingw64_shellを用いて起動するところまで確認して下さい.もしも,うまく起動できなかったとしたら環境変数の設定のどこかに間違いがあるはずです.修正して下さい.
MSYS2環境の設定
すでに$DROPBOX/bin
を作成してあります.ここにいくつかのスクリプトを保存して下さい.リンク先には以下の三つのファイルが見つかります.これらすべてを$DROPBOX/bin
に保存して下さい.
-
cmake-root
-
profile
MSYS2環境のシェルのための設定です.よく利用するディレクトリに移動するためのコマンドや,CMakeのプロジェクトを宣言するためのスクリプトが定義されています.
-
drop
コマンドDropbox内のディレクトリへ移動するためのコマンドです.
drop win/src
のように使うと,cd /c/wakita/Dropbox\ \(smartnova\)/win/src
と同じように動作します. -
win
コマンドdrop
コマンドとよく似ています.$DROPBOX/win
ディレクトリ以下に移動するためのコマンドです.win work/myproject
と実行するとdrop win/work/myproject
,則ちcd /c/wakita/Dropbox\ \(smartnova\)/win/work/myproject
ができます. -
pf
コマンドdrop
コマンドとよく似ています./c/Program\ Files\ \(x86\)/
以下のディレクトリに移動することができます. -
cmake-root
コマンドCMakeを用いて開発されているプロジェクトのソースディレクトリで実行するためのコマンドです.このコマンドを実行すると,現在の実行環境にそのソースディレクトリの情報と,プロジェクトをビルドするためのディレクトリの情報などが記録されます.たとえば,
$DROPBOX/win/src/glbinding
のなかで,cmake-rootコマンドを実行すると,-
このディレクトリのパスが
__PROJECT_ROOT__
環境変数に設定されます. -
/usr/tmp/glbinding
というディレクトリが作成され,そのパスが__PROJECT_BUILD__
環境変数に設定されます. -
これらのディレクトに移動するために以下のコマンドが定義されます.
-
cmake
コマンドWindowsではCMakeは
c:\Program Files (x86)\CMake
にインストールされ,起動するのが面倒ですが,それを助けてくれます.MSYS2での開発に必要な設定を施すので,引数なしでこのコマンドを実行するだけで普通にCMakeを利用できます.もちろん,CMakeLists.txtのあるディレクトリで実行しなくてはいけません.cmakeがうまく動かず、cmake was unable to find a build program corresponding to MSYS Makefilesと言われることがあります。これは、cmakeがmakeを見つけられないときのエラーです。CMAKE_MAKE_PROGRAMを適宜設定すれば解決できます。
-
make
コマンドMSYS2のmakeコマンドのラッパーです.現在のディレクトリがどこであっても適切にビルドが実行されます.
-
vmake
コマンドCMakeが生成するMakefileはビルドプロセスの詳細を隠します.隠された情報はログファイルに保存されているのですが,それを確認するのは面倒なこともあります.vmakeコマンドは前述のmakeコマンドに
VERBOSE=1
オプションを追加することで,ビルドプロセスの詳細を表示します.CMakeLists.txtのデバッグに利用できます. -
distclean
コマンドビルドディレクトリを削除します.プロジェクトのビルドを新規にやりなおしたいときに使います.続けて,cmakeコマンドとmakeコマンドを実行すればビルドし直すことができます.
-
root
コマンド$__PROJECT_ROOT__
以下のディレクトリに移動します.たとえば,root source/examples
でソースコードに含まれるsource/examples
ディレクトリに移動できます. -
build
コマンド$__PROJECT_BUILD__
以下ディレクトリに移動します. -
cmf
コマンドCMakeプロジェクトのターゲットをビルドするディレクトリに移動します.たとえば,現在のプロジェクトが callbacks というターゲットを含んでいるときに,
cmf callbacks
とすることで,このターゲットのビルドに用いられているコンパイルオプションやリンカーオプションを確認する手間が省けます.
-
-
これらのコマンドの定義はMSYS2のなかで
type
コマンドで確認できます.たとえば,type drop
で眺めてみて下さい. -
Windowsキー+X
について
Windowsキーを押しながらXを押すと,Windowsのさまざまな機能を簡単に呼び出すことができます.コマンドを起動したり,Explorerを表示したり,コントロールパネルを開いたり,管理者権限でコマンドを実行したりなど,一般のユーザはあまり使わないけれど,開発者にはニーズのある機能が簡単に利用できます.
-
Windows+X R
コマンドの名前を指定して実行する.Win-Rに続いてconsoleを入力するとConsolezを起動できる.
-
Windows+X E
Explorerを起動する.
-
Windows+X P
コントロールパネル.環境変数の設定をするときはコントロールパネルでCtrl-F(検索)し,すばやくenvと入力するとよい.
-
Windows+X C
Cmd.exeの起動.
-
Windows+X A
Cmd.exeを管理者権限で実行.管理者としての作業が求められるときに便利.
Consolezの設定
Consolezを起動(W-x r console)し,メニューをEdit→Settings…と辿ると設定画面が出てきます.
-
Consoleタブでの設定
- Shell =
c:\msys64\usr\bin\zsh.exe --login -i
- Startup dir = c:\wakita — 適宜,自分のホームディレクトを指定する
- Shell =
-
Tabs
- Tab nameビューで Console を選択し
-
Title = MSYS2
-
Icon =
c:\msys64\msys2.ico
— 必須の設定ではないけど -
Shell =
c:\msys64\usr\bin\zsh.exe --login -i
-
Startup dir = c:\wakita — 適宜,自分のホームディレクトを指定する
-
cmd.exe
やそれを管理者権限で起動する設定も簡単に追加できます. - Tab nameビューで Console を選択し
SSHキーの生成とGitHubへの設定
GitHubにアカウントを持っているならば,SSHの公開鍵をGitHubに登録するとよいでしょう.
OpenGL関連のライブラリをインストール
ここまでの作業がうまくいっていれば以下の作業はスムーズにできるはずです.
pacman を用いた各種のソフトウェアのインストール
pkg-config, automake-wrapper, git, make, cmake, gcc, glfw, nodejs, jsoncpp についてはMSYS2のパッケージ管理システムを用いて以下のようにインストールできます.
pacman -S msys/pkg-config
pacman -S msys/automake-wrapper
pacman -S msys/git
pacman -S mingw64/mingw-w64-x86_64-make
pacman -S mingw64/mingw-w64-x86_64-cmake
pacman -S mingw64/mingw-w64-x86_64-gcc
pacman -S mingw64/mingw-w64-x86_64-glfw
pacman -S mingw64/mingw-w64-x86_64-nodejs
pacman -S mingw64/mingw-w64-x86_64-jsoncpp
glbindingのインストール
glbindingはまだpacmanに含まれていないので,ソースコードからビルドします.$DROPBOX/win/src
の下で作業するものと仮定します.
CMakeを実行するときに静的ライブラリを作成するためのオプションを与えます.
-
GitHubからcloneします.
-
GitHubのアカウントを持っている人の場合:
git clone git@github.com:hpicgs/glbinding.git
-
GitHubのアカウントを持っていない人の場合:
git clone https://github.com/hpicgs/glbinding.git
-
-
git clone
したディレクトリに移動し,以下の要領でビルドとインストールをする-
cmake-root
-
cmake -DOPTION_BUILD_STATIC=ON
-
make install
-
glbindingのサンプルのビルド
glbindingのビルドをしたのと同じディレクトリで以下の作業をします.
-
cmake -DOPTION_BUILD_EXAMPLES=ON
-
make
ビルドがうまくいったら,callbacks
, cubescape
コマンドを実行することができます.