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

Published

23 June 2018

Tags