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-toolchainpacman -S msys/pkg-configpacman -S msys/automake-wrapperpacman -S msys/gitpacman -S msys/makapacman -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-glfwpacman -S mingw64/mingw-w64-x86_64-nodejspacman -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:\wakitaMSYS2(開発環境の対話的シェル)を起動したときに最初に開くディレクトリ
-
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
-
profileMSYS2環境のシェルのための設定です.よく利用するディレクトリに移動するためのコマンドや,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 EExplorerを起動する.
-
Windows+X Pコントロールパネル.環境変数の設定をするときはコントロールパネルでCtrl-F(検索)し,すばやくenvと入力するとよい.
-
Windows+X CCmd.exeの起動.
-
Windows+X ACmd.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-configpacman -S msys/automake-wrapperpacman -S msys/gitpacman -S mingw64/mingw-w64-x86_64-makepacman -S mingw64/mingw-w64-x86_64-cmakepacman -S mingw64/mingw-w64-x86_64-gccpacman -S mingw64/mingw-w64-x86_64-glfwpacman -S mingw64/mingw-w64-x86_64-nodejspacman -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 コマンドを実行することができます.