CMakeの初歩の初歩 備考録とエトセトラ
CやC++の開発環境って、けっこうな数ありますよね。 WindowsであればVisual Studio、MacであればXCodeとか。
また、コンパイラもgccやclangやcl(VSのC++コンパイラ)があったり、バージョン毎に機能が違ったりとか。
これ、一人で作業する分には別にどーってことないわけなんですけど、 複数人が関与してきたり、違うプラットフォームや違うバージョンで使いたいってなると、少々面倒がでてきます。
例えば、Windows用の、Visual Studioで作成されたコマンドラインツールをMacに移植したい、って場合。 Visual StudioはWindows専用なので、Macでは使えません(最近はVSCodeなんてのも出てきているようですが)。 なので、XCode用のプロジェクトを作るのが一般的なのかなと思います(Mac持ってないのでよく知りません)が、 手作業でこれをやるのはめんどうくさいですよね。
そんなときは、CMakeを使いましょう、というお話。
CMake って、なぁに?
CMake は、様々なOSに対応した、ビルドシステムを生成するためのソフトです。
このソフトを使うと、Unix Makefileや、Visual Studio、Eclipse用のプロジェクトファイルの生成をすることができます。
名前と仕組みはUnix Make に近いですが、機能はどちらかというとautoconfに近いです。
使い方
まず、CMakeLists.txtという、CMake用の設定ファイルを作成します。
その後、 CMake <CMakeLists.txtのあるディレクトリ>
と実行すると、カレントディレクトリにMakefileが作成されます。
出力するファイルの種類は-Gオプションで決めることができます。
Visual Studio 2013用の設定ファイルが作りたい場合、 cmake -G "Visual Studio 12 2013" <CMakeLists.txtのあるディレクトリ>
でイケます。
出力可能なファイルの種類は、環境によって異なるので、注意してください。
CMakeLists.txt の機能のキホン
CMakeLists.txt には、実行環境やコンパイラ等を特定するための仕組みがあります。
以下はその変数の例。
Variable | Description |
---|---|
WIN32 | Windows 用の出力をする場合に1になります |
UNIX | UNIX互換OS 用の出力をする場合に1になります |
APPLE | APPLE製品向けの出力をする場合に1になります |
MINGW | MINGW 向けの出力をする場合に1になります |
また、以下のような変数もあります。
Variable | Description |
---|---|
CMAKE_SYSTEM_NAME | 出力対象のシステム名 |
CMAKE_HOST_SYSTEM_NAME | CMakeを実行する環境のシステム名 |
普通は、CMAKE_SYSTEM_NAME と CMAKE_HOST_SYSTEM_NAME には同じ値が入るのですが、 クロスコンパイルをする際等に、この変数をうまく使うことでうまく出力を制御できます。
例
Linux での実行結果
$ cmake ..
-- WIN32 :
-- MINGW :
-- APPLE :
-- UNIX : 1
-- System : Linux
-- Host : Linux
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nullpon/tmp/cmake
Windows での実行結果 (VC2008インストール環境下)
>cmake ..
-- Building for: Visual Studio 9 2008
-- WIN32 : 1
-- MINGW :
-- APPLE :
-- UNIX :
-- System : Windows
-- Host : Windows
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/foo/Desktop/cm/x
その他の機能については、おいおい書いていきたいと思います。
blog comments powered by Disqus