Emscriptenは、C++をJavaScriptにコンパイルする、LLVMベースのコンパイラ。
このドキュメントでは、特定のプロジェクトに依存せず、Emscripten向けに、CMakeを使用してC++プロジェクトをビルドする方法を紹介する。
このドキュメントで扱う各ツールのバージョンは、以下のものとする:
- Windows 8.1
- Emscripten 1.34.1
- CMake 2.8
- Visual Studio 2013
Download and install - Emscripten documentation
上記のページから、Windows環境向けの「Emscripten SDK Offline Installer」をダウンロードし、インストールする。(1.34.1現在、Web Installerはインストール先と環境変数が食い違ってしまうため、うまくいかないので注意)
下記のようなインストール結果が確認できれば、インストール成功:
- バージョン1.34.1を想定する。
- 「C:\Program Files\Emscripten\emscripten\1.34.1」というディレクトリができていること。
- システム環境変数のEMSCRIPTENができており、2. で記述したディレクトリが設定されていること。このディレクトリが、CMake上では
${EMSCRIPTEN_ROOT_PATH}
という変数に設定される。 - システム環境変数のPathに、2. で記述されたディレクトリが設定されていること。
http://www.cmake.org/download/
CMakeの公式サイトから、最新バージョンのCMakeをダウンロードしてインストールする。2.8以降であれば、どのバージョンでもかまわない。
Emscripten向けには、CMakeでVisual Studioのプロジェクトを作成できない。これは、CMakeがVisual Studioのビルドターゲット設定(DebugとかReleaseとか)をカスタマイズできないためである。
そのため、以下のようなビルドを行う:
- MinGWのMakefileを、CMakeで作る
- Visual StudioのNMakeを使用してビルドする
MinGWのmakeをインストールするには、まず以下のページから、MinGWのインストーラをダウンロードして、"インストーラを"インストールする。
http://www.mingw.org/wiki/getting_started
このインストーラを使用して、以下のようなコマンドで、mingw32-makeをインストールする。
cd C:\MinGW\bin
mingw-get install mingw32-make
以下の構成で、C++プロジェクトを用意する。
+ emc_sample
+ cmake_dir
+ ecmake_dir
CMakeLists.txt
main.cpp
main.cppは、以下のようなHello Worldプログラムであるとする。
#include <iostream>
int main()
{
std::cout << "Hello World" << std::endl;
}
CMakeLists.txtは、以下のように記述する。
cmake_minimum_required(VERSION 2.8)
set(CMAKE_BUILD_TYPE Debug)
add_executable(emc_sample main.cpp)
if (EMSCRIPTEN)
set(CMAKE_EXECUTABLE_SUFFIX ".html") # デフォルトでは.js
endif()
以下のコマンドを入力する:
cd cmake_dir
cmake ..
これで、Visual Studioのプロジェクトが作成されるので、そのプロジェクトを開いてビルドし、実行すると「Hello World」がコンソールに出力される。
まず、Visual Studioのコマンドプロンプトを起動する。これは、nmakeへのパスを事前に通すために必要となる。
次に、以下のコマンドでビルドする:
cd ecmake_dir
emcmake cmake .. -G "MinGW Makefiles"
nmake
これで、ecmake_dirディレクトリ以下に、emc_sample.htmlとemc_sample.jsという2つ実行ファイルが作成される。
htmlを開くと、Hello Worldがコンソールに出力される。
emcmakeは、以下のような、Emscripten環境向けのツールチェインの登録を、自動的に行ってくれるものだと考えればよい。
cmake DCMAKE_TOOLCHAIN_FILE=<EmscriptenRoot>/cmake/Modules/Platform/Emscripten.cmake