目次
Cmake - クロスプラットフォームのコンパイラに依存しない make 自動化システム
Cmake
CMake は、ソフトウェアの構築、テスト、および、パッケージングを行うために設計された、オープンソースのクロスプラットフォームのツールである。CMake は単純なプラットフォームとコンパイラに依存しない設定ファイルを使ってソフトウェアのコンパイルプロセスを制御し、ネイティブの makefile とワークスペースを生成するのに使われる。実際のビルドにおいては、make、Xcode、Visual Studio のようなネイティブのビルド環境が利用される。一連の CMake ツールは、Insight Segmentation and Registration Toolkit(ITK) や可視化ソフトウェアである Visualization Toolkit(VTK) などのオープンソースプロジェクト用の強力なクロスプラットフォーム構築環境の必要性に応えて Kitware 社によって開発された。
開発環境
自分の開発環境は、OS が Fedora 29 でコンパイラは gcc バージョン 8.2.1、make は GNU Make 4.2.1 である。
インストール
Fedora
$ sudo dnf install cmake cmake-gui
メタデータの期限切れの最終確認: 0:08:48 時間前の 2023年10月10日 06時14分08秒 に実施しました。 依存関係が解決しました。 ============================================================================================================== パッケージ アーキテクチャー バージョン リポジトリー サイズ ============================================================================================================== インストール: cmake x86_64 3.27.6-1.fc38 updates 8.0 M cmake-gui x86_64 3.27.6-1.fc38 updates 2.7 M 依存関係のインストール: cmake-data noarch 3.27.6-1.fc38 updates 2.2 M rhash x86_64 1.4.3-2.fc38 fedora 194 k vim-filesystem noarch 2:9.0.1984-1.fc38 updates 18 k トランザクションの概要 ============================================================================================================== インストール 5 パッケージ ダウンロードサイズの合計: 13 M インストール後のサイズ: 46 M これでよろしいですか? [y/N]: y パッケージのダウンロード: (1/5): rhash-1.4.3-2.fc38.x86_64.rpm 397 kB/s | 194 kB 00:00 (2/5): cmake-3.27.6-1.fc38.x86_64.rpm 2.5 MB/s | 8.0 MB 00:03 (3/5): vim-filesystem-9.0.1984-1.fc38.noarch.rpm 235 kB/s | 18 kB 00:00 (4/5): cmake-data-3.27.6-1.fc38.noarch.rpm 635 kB/s | 2.2 MB 00:03 (5/5): cmake-gui-3.27.6-1.fc38.x86_64.rpm 365 kB/s | 2.7 MB 00:07 -------------------------------------------------------------------------------------------------------------- 合計 1.4 MB/s | 13 MB 00:09 トランザクションの確認を実行中 トランザクションの確認に成功しました。 トランザクションのテストを実行中 トランザクションのテストに成功しました。 トランザクションを実行中 準備 : 1/1 インストール中 : rhash-1.4.3-2.fc38.x86_64 1/5 インストール中 : vim-filesystem-2:9.0.1984-1.fc38.noarch 2/5 インストール中 : cmake-data-3.27.6-1.fc38.noarch 3/5 インストール中 : cmake-3.27.6-1.fc38.x86_64 4/5 インストール中 : cmake-gui-3.27.6-1.fc38.x86_64 5/5 scriptletの実行中: cmake-gui-3.27.6-1.fc38.x86_64 5/5 検証 : rhash-1.4.3-2.fc38.x86_64 1/5 検証 : cmake-3.27.6-1.fc38.x86_64 2/5 検証 : cmake-data-3.27.6-1.fc38.noarch 3/5 検証 : cmake-gui-3.27.6-1.fc38.x86_64 4/5 検証 : vim-filesystem-2:9.0.1984-1.fc38.noarch 5/5 インストール済み: cmake-3.27.6-1.fc38.x86_64 cmake-data-3.27.6-1.fc38.noarch cmake-gui-3.27.6-1.fc38.x86_64 rhash-1.4.3-2.fc38.x86_64 vim-filesystem-2:9.0.1984-1.fc38.noarch 完了しました!
※cmake-gui は Cmake のための QT GUI。
使い方
Makefile を生成
build ディレクトリを作成して、その中に Makefile を生成する。
$ cd project_dir $ mkdir build && cd build
$ cmake ..
or
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..
ビルド
build ディレクトリの中でビルドを開始する。
$ make
or
$ make -j4
CMakeLists.txt の作成
- CMakeLists.txt
# CMake のバージョンを設定 cmake_minimum_required(VERSION 3.12.1) # デバッグおよびリリース構成タイプのみを生成 set(CMAKE_CONFIGURATION_TYPES Debug Release) # プロジェクト名と使用する言語を設定 project(wxwebviewchromium CXX) if (WIN32) set(exe_mode WIN32) else () set(exe_mode "") endif () # 実行ファイルを設定 add_executable(simple ${exe_mode} simple.cpp simple.h)
Chromium Embedded Framework(CEF) コンフィギュレーション
# # CEF コンフィギュレーション # # このプロジェクトの cmake/ ディレクトリをモジュールパスに追加 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") # CEF 配布バージョンを指定 set(CEF_VERSION "3.3626.1886.g162fdec") # プラットフォームを決定 if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") set(CEF_PLATFORM "macosx64") elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") if(CMAKE_SIZEOF_VOID_P MATCHES 8) set(CEF_PLATFORM "linux64") else() set(CEF_PLATFORM "linux32") endif() elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") if(CMAKE_SIZEOF_VOID_P MATCHES 8) set(CEF_PLATFORM "windows64") else() set(CEF_PLATFORM "windows32") endif() endif() # CEF バイナリ配布をダウンロードして解凍(DownloadCEF.cmake を実行) include(DownloadCEF) DownloadCEF("${CEF_PLATFORM}" "${CEF_VERSION}" "${CMAKE_SOURCE_DIR}/third_party/cef") # CEF バイナリ配布の cmake/ ディレクトリをモジュールパスに追加 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CEF_ROOT}/cmake") # CEF 設定をロードします(FindCEF.cmake を実行) find_package(CEF REQUIRED) include_directories(${CEF_INCLUDE_DIR})