====== CMakeを使ったHello World ======
[[fltk:|{{:fltk:fltk_shadow.png?200|}}]]
このページでは、[[helloworld|前回のチュートリアル]]で作成したのとまったく同じプログラムを、CMakeを使ってビルドする方法を紹介します。
具体的には、FLTKを利用するために必要なCMakeListsファイルの最低限の内容とcmakeコマンドの実行方法だけ紹介します。
CMake自体についての詳しい解説は行いません。
===== 前提 =====
[[install|FLTKのインストール]]に従って、FLTK 1.4.3が $HOME/MikanBox 以下にインストールされているものとします。
違う場所にインストールした場合は(そうであっても全く問題ありません)、パスをご自身のものに置き換えてください。
また、CMakeもインストールされている必要があります。
===== 作業ディレクトリの用意 =====
作業ディレクトリは $HOME/code/fltk/hello-fltk-cmake とします。
ここに作成するプログラムのソースコードを保存して、また、ここでビルドを行います。
繰り返しになりますが、こういった名前やパスは、何かしら決めておかないと説明がしづらいので提示しているだけです。
同じ名前にする必要は全くありません。
ご自身の好みの場所に好きな名前で作成してください。
まずディレクトリを作成して、そこに移動しておきます。
$ mkdir -p ~/code/fltk/hello-fltk-cmake
$ cd $_
===== プログラムのソースコード =====
プログラムのソースコード[[fltk:helloworld#プログラムのソースコード|前回のHello World]]で使用したものと全く同じです。
作業ディレクトリhello-fltk-cmake直下にmain.cppという名前でコピーを作成しておきます。
===== CMakeLists.txt =====
作業ディレクトリhello-fltk-cmakeの直下にCMakeLists.txtという名前のファイルを作成します。
__CMakeLists.txt__:
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(hello-fltk-cmake LANGUAGES CXX)
find_package(FLTK 1.4 REQUIRED CONFIG)
add_executable(hello-fltk-cmake main.cpp)
target_link_libraries(hello-fltk-cmake PRIVATE fltk::fltk)
CMake自体にFLTKのMODULEモードのコンフィギュレーション(FindFLTK.cmake)が同梱されています。
一方、FLTKもCMakeのコンフィギュレーションを提供しています。
なるべくFLTKが提供するものを利用するほうが良いでしょう。
FLTK 1.3まではMODULEモードのコンフィギュレーションが提供されていましたが、FLTK 1.4からCONFIGモードのコンフィギュレーションが提供されています。
上のCMakeLists.txtのように ''find_package(FLTK 1.4 REQUIRED CONFIG)'' の1行を含めるだけでFLTKが利用可能になります。
[[https://cmake.org/cmake/help/latest/command/find_package.html|find_package]]には多数のオプションが存在していて、細かな調整が可能です。
あまり詳細に踏み込みたくはないので、今回は最低限のオプションのみ指定しました。
===== ビルドディレクトリの作成 =====
現在の作業ディレクトリhello-fltk-cmakeの中にbuildという名前のディレクトリを作成して、その中に移動します。
$ mkdir build
$ cd build
===== CMakeコンフィギュレーションの実行 =====
buildディレクトリの中でcmakeコマンドを実行します。
$ cmake .. -DCMAKE_PREFIX_PATH=~/MikanBox
CMAKE_PREFIX_PATHにFLTKをインストールしたパスを設定するのが最大のポイントです。
もし標準的なディレクトリFLTKをインストールしたのであれば不要なオプションです。
しかし、今回のように非標準的な場所にインストールした場合であっても、柔軟かつ簡単に対処できるのはCMakeの強みの一つと言えます。
===== ビルドの実行 =====
CMakeコンフィギュレーション時に「-G」で指定しなければ、大抵はMakefileが生成されます。
もしかしたらbuild.ninjaやそれ以外のケースがあるかもしれませんので、少し注意して経過を観察してみてください。
Makefileが生成されているのであればmakeを実行します。
$ make
もしbuild.ninjaが生成されているのであればninjaを実行します。
$ ninja
どのビルドツールを実行するのかの判断をCMakeにまかせてしまう場合はcmakeをを実行します。
$ cmake --build .
この場合、カレントディレクトリを意味する「.」を忘れないようにしてください。
==== 結果の確認 ====
ソースコード(hello-fltk-cmake.cpp)に問題がなければ、ビルドに成功して実行可能バイナリファイルが生成されます。
$ ls -l
合計 1664
-rw-rw-r-- 1 freemikan freemikan 12884 5月 23 01:32 CMakeCache.txt
drwxrwxr-x 6 freemikan freemikan 4096 5月 23 01:32 CMakeFiles
-rw-rw-r-- 1 freemikan freemikan 5347 5月 23 01:32 Makefile
-rw-rw-r-- 1 freemikan freemikan 1660 5月 23 01:32 cmake_install.cmake
-rwxrwxr-x 1 freemikan freemikan 1670960 5月 23 01:32 hello-fltk-cmake ←生成された実行可能バイナリファイル
===== Hello Worldプログラムの実行 =====
最後に、生成された実行可能バイナリファイルを実行して、プログラムが起動することを確認しておきましょう。
$ ./hello-fltk-cmake
うまく行けばウィンドウが表示されます。
{{ :fltk:fltk_hello_cmake.jpg |Hello FLTK}}