「Linuxコマンド - CMake」の版間の差分
| (同じ利用者による、間の6版が非表示) | |||
| 44行目: | 44行目: | ||
sudo zypper install libcurl-devel libbz2-devel xz-devel libexpat-devel zlib-devel libarchive-devel libuv-devel \ | sudo zypper install libcurl-devel libbz2-devel xz-devel libexpat-devel zlib-devel libarchive-devel libuv-devel \ | ||
libzstd-devel jsoncpp-devel rhash-devel libnghttp2-devel python3-Sphinx \ | libzstd-devel jsoncpp-devel rhash-devel libnghttp2-devel python3-Sphinx \ | ||
# Qt 6を使用する場合 | |||
qt6-core-devel qt6-gui-devel qt6-widgets-devel | |||
# Qt 5を使用する場合 | |||
libQt5Core-devel libQt5Gui-devel libQt5Widgets-devel | libQt5Core-devel libQt5Gui-devel libQt5Widgets-devel | ||
<br> | <br> | ||
| 93行目: | 98行目: | ||
<br><br> | <br><br> | ||
== Extra CMake Module(ECM)のインストール == | == Extra CMake Module (ECM) のインストール == | ||
追加のCMakeモジュールパッケージ (ECM) は、CMakeが提供するモジュールを拡張するものである。<br> | |||
ECMは、KDEソフトウェア全体におけるCMakeスクリプトの重複を削減することであるが、CMakeビルドシステムを利用するあらゆるソフトウェアに有用となるよう設計されている。<br> | |||
<br> | |||
ECMには、以下に示すものが含まれている。<br> | |||
* find_packageコマンドが一般的なソフトウェアを検索するために使用するモジュール | |||
* CMakeLists.txtファイル内で直接使用して一般的なタスクを実行できるモジュール | |||
* ユーザがコマンドラインで指定する必要があるツールチェーンファイル | |||
* KDEコミュニティが開発するソフトウェアで使用される一般的なビルド設定 | |||
<br> | |||
[https://github.com/KDE/extra-cmake-modules/tags Extra CMake ModuleのGithub]にアクセスして、ソースコードをダウンロードする。<br> | [https://github.com/KDE/extra-cmake-modules/tags Extra CMake ModuleのGithub]にアクセスして、ソースコードをダウンロードする。<br> | ||
ダウンロードしたファイルを解凍する。<br> | ダウンロードしたファイルを解凍する。<br> | ||
| 100行目: | 114行目: | ||
<br> | <br> | ||
次に、Extra CMake Moduleのビルドに必要なライブラリをインストールする。<br> | 次に、Extra CMake Moduleのビルドに必要なライブラリをインストールする。<br> | ||
sudo zypper install reuse sphinx libsphinxclient-devel python3-Sphinx python3-qt5-devel | sudo zypper install reuse sphinx libsphinxclient-devel \ | ||
# Qt 6を使用する場合 | |||
python311-Sphinx python311-PyQt6-devel qt6-core-devel qt6-tools qt6-linguist-devel | |||
# Qt 5を使用する場合 | |||
python3-Sphinx python3-qt5-devel libQt5Core-devel libqt5-qttools libQt5QuickControls2-devel libqt5-linguist-devel | |||
<br> | <br> | ||
ビルド用ディレクトリを作成して、Extra CMake Moduleをビルドおよびインストールする。<br> | ビルド用ディレクトリを作成して、Extra CMake Moduleをビルドおよびインストールする。<br> | ||
| 107行目: | 126行目: | ||
mkdir build && cd build | mkdir build && cd build | ||
cmake -DCMAKE_INSTALL_PREFIX=<CMakeのインストールディレクトリ> | cmake -DCMAKE_BUILD_TYPE=Release \ | ||
-DCMAKE_INSTALL_PREFIX=<CMakeのインストールディレクトリ> \ | |||
-DBUILD_QTHELP_DOCS=ON \ | |||
.. | |||
make -j $(nproc) | make -j $(nproc) | ||
make install | make install | ||
| 148行目: | 170行目: | ||
<br> | <br> | ||
CコンパイラまたはC++コンパイラのフラグを変更するには、以下のオプションを付加する。<br> | CコンパイラまたはC++コンパイラのフラグを変更するには、以下のオプションを付加する。<br> | ||
- | -DCMAKE_C_FLAGS="-std=c17" -DCMAKE_CXX_FLAGS="-std=c++17" | ||
<br> | <br> | ||
オプション設定を対話式に変更する場合は、<code>ccmake</code>コマンドを使用する。<br> | オプション設定を対話式に変更する場合は、<code>ccmake</code>コマンドを使用する。<br> | ||
| 187行目: | 209行目: | ||
キャッシュ変数<code>CMAKE_CONFIGURATION_TYPES</code>に<code>Release;RelWithDebInfo</code>のように値を設定する。<br> | キャッシュ変数<code>CMAKE_CONFIGURATION_TYPES</code>に<code>Release;RelWithDebInfo</code>のように値を設定する。<br> | ||
<br><br> | <br><br> | ||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ: | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]] | ||
2025年11月7日 (金) 08:27時点における最新版
概要
CMakeとは、多様なプラットフォームでソースコードをビルドするためのツールである。
ここでは、CMake向けに構築されたソースコードをコマンドラインからビルドする方法について記載する。
CMakeのインストール
CMakeの公式Webサイトにアクセスして、
cmake-<バージョン>.tar.gzファイル(ソースコード)またはcmake-<バージョン>-linux-x86_64.tar.gzファイル(バイナリ)をダウンロードする。
バイナリファイルをインストールする場合
cmake-<バージョン>-linux-x86_64.tar.gzファイル(バイナリ)をを解凍して、任意のインストールディレクトリに配置する。
tar xf cmake-<バージョン>-linux-x86_64.tar.gz mkdir <CMakeのインストールディレクトリ> cp -r cmake-<バージョン>-linux-x86_64/* <CMakeのインストールディレクトリ>
CMake GUIもインストールする場合、デスクトップエントリファイルを作成する。
vi ~/.local/share/applications/CMake_GUI.desktop
# ~/.local/share/applications/CMake_GUI.desktopファイル [Desktop Entry] Type=Application Version=1.0 Name=CMake Comment=Cross-platform buildsystem Exec=/<CMakeのインストールディレクトリ>/bin/cmake-gui %f Icon=/<CMakeのインストールディレクトリ>/share/icons/hicolor/128x128/apps/CMakeSetup Categories=Development; MimeType=application/x-cmakecache; Terminal=false X-MultipleArgs=false StartupNotify=true
~/.profileファイル等に環境変数PATHを追記する。
vi ~/.profile
# ~/.profileファイル export PATH="/<CMakeのインストールディレクトリ>/bin:$PATH"
ソースコードからインストールする場合
CMake GUIをインストールする場合、ビルドに必要なライブラリをインストールする。
sudo zypper install libcurl-devel libbz2-devel xz-devel libexpat-devel zlib-devel libarchive-devel libuv-devel \
libzstd-devel jsoncpp-devel rhash-devel libnghttp2-devel python3-Sphinx \
# Qt 6を使用する場合
qt6-core-devel qt6-gui-devel qt6-widgets-devel
# Qt 5を使用する場合
libQt5Core-devel libQt5Gui-devel libQt5Widgets-devel
cmake-<バージョン>.tar.gzファイル(ソースコード)を解凍する。
tar xf cmake-<バージョン>.tar.gz cd cmake-<バージョン>
ビルド用ディレクトリを作成する。
mkdir build && cd build
CMakeをビルドおよびインストールする。
# CMake GUIをインストールする場合 ../configure --qt-gui --prefix=<CMakeのインストールディレクトリ> または ../bootstrap --qt-gui --prefix=<CMakeのインストールディレクトリ> --sphinx-html --sphinx-man --parallel=$(nproc) # CMake GUIをインストールしない場合 ../configure --prefix=<CMakeのインストールディレクトリ> または ../bootstrap --prefix=<CMakeのインストールディレクトリ> --sphinx-html --sphinx-man --parallel=$(nproc) gmake -j $(nproc) gmake install
CMake GUIもインストールする場合、デスクトップエントリファイルを作成する。
vi ~/.local/share/applications/CMake_GUI.desktop
# ~/.local/share/applications/CMake_GUI.desktopファイル [Desktop Entry] Type=Application Version=1.0 Name=CMake Comment=Cross-platform buildsystem Exec=/<CMakeのインストールディレクトリ>/bin/cmake-gui %f Icon=/<CMakeのインストールディレクトリ>/share/icons/hicolor/128x128/apps/CMakeSetup Categories=Development; MimeType=application/x-cmakecache; Terminal=false X-MultipleArgs=false StartupNotify=true
~/.profileファイル等に環境変数PATHを追記する。
vi ~/.profile
# ~/.profileファイル export PATH="/<CMakeのインストールディレクトリ>/bin:$PATH"
Extra CMake Module (ECM) のインストール
追加のCMakeモジュールパッケージ (ECM) は、CMakeが提供するモジュールを拡張するものである。
ECMは、KDEソフトウェア全体におけるCMakeスクリプトの重複を削減することであるが、CMakeビルドシステムを利用するあらゆるソフトウェアに有用となるよう設計されている。
ECMには、以下に示すものが含まれている。
- find_packageコマンドが一般的なソフトウェアを検索するために使用するモジュール
- CMakeLists.txtファイル内で直接使用して一般的なタスクを実行できるモジュール
- ユーザがコマンドラインで指定する必要があるツールチェーンファイル
- KDEコミュニティが開発するソフトウェアで使用される一般的なビルド設定
Extra CMake ModuleのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf extra-cmake-modules-<バージョン>.tar.gz cd extra-cmake-modules-<バージョン>
次に、Extra CMake Moduleのビルドに必要なライブラリをインストールする。
sudo zypper install reuse sphinx libsphinxclient-devel \
# Qt 6を使用する場合
python311-Sphinx python311-PyQt6-devel qt6-core-devel qt6-tools qt6-linguist-devel
# Qt 5を使用する場合
python3-Sphinx python3-qt5-devel libQt5Core-devel libqt5-qttools libQt5QuickControls2-devel libqt5-linguist-devel
ビルド用ディレクトリを作成して、Extra CMake Moduleをビルドおよびインストールする。
Extra CMake ModuleのインストールディレクトリはCMakeのインストールディレクトリを共通であることに注意する。
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=<CMakeのインストールディレクトリ> \
-DBUILD_QTHELP_DOCS=ON \
..
make -j $(nproc)
make install
ソース外ビルド
ソースコードディレクトリとビルドディレクトリが異なることをソース外ビルドと呼ぶ。
これは、ソースコードとビルドの出力を分離することにより、開発者が同じソースコードディレクトリに複数のビルドディレクトリを作成できるという利点もあり、
デバッグバージョンとリリースバージョン等の異なるオプションでビルドをセットアップすることができる。
ビルドディレクトリをソースツリーの外側に配置することを推奨する。
CMakeコマンドの基本
まず、ビルドするディレクトリを作成して、そのディレクトリに移動する。
ディレクトリを作成する理由は、ソースコードツリーがビルド時の生成ファイルで汚染されるのを防ぐためである。
mkdir build cd build
以下のように、CMakeコマンドを実行する。
引数には、ソースコードのルートディレクトリ(CMakeLists.txtファイルがあるディレクトリ)を指定する。
cmake -G <プロジェクトジェネレータ 例. "Unix Makefiles"やNinja等> <CMakeLists.txtファイルがあるディレクトリ> cmake --build <ビルドディレクトリ> --config <Debug または Release> --target <ターゲット名>
Makefileが作成されるので、それを使用してビルドを行う。
make -j $(nproc) make install # ただし、CMakeLists.txtファイルに設定が記述されていることが必要
オプションの指定
CMakeコマンドの実行時に、オプションを指定することが可能である。
インストールディレクトリを指定するには、以下のオプションを付加する。
cmake -DCMAKE_INSTALL_PREFIX=<インストールディレクトリ> <ソースコードがあるディレクトリ> または cmake --install <インストールディレクトリ> <ソースコードがあるディレクトリ>
CコンパイラまたはC++コンパイラを変更するには、以下のオプションを付加する。
-DCMAKE_C_COMPILER=<Cコンパイラのパス> -DCMAKE_CXX_COMPILER=<C++コンパイラのパス>
CコンパイラまたはC++コンパイラのフラグを変更するには、以下のオプションを付加する。
-DCMAKE_C_FLAGS="-std=c17" -DCMAKE_CXX_FLAGS="-std=c++17"
オプション設定を対話式に変更する場合は、ccmakeコマンドを使用する。
ccmakeの操作方法は、画面下部に表示されている通りである。
矢印キーもしくは[J]キー、[K]キーでカーソルが上下に移動すると、中段に選択中の変数の説明が表示される。
[Enter]キーでその項目を編集して、[C]キーでConfigureを実行、[G]キーでGenerateを実行して、ccmakeを終了する。
ccmake <ソースコードがあるディレクトリ>
オプション設定をGUIに変更する場合は、buildディレクトリを作成して、その中で以下のコマンドを実行する。
cmake-gui <ソースコードがあるディレクトリ>
ビルドタイプの指定
変数を通したプロジェクト設定の例として、デバッグ / リリース等のビルドタイプを指定する方法がある。
この設定には、CMAKE_BUILD_TYPE、CMAKE_CONFIGURATION_TYPESという2つのキャッシュ変数が絡む。
どちらを設定すべきかは、ジェネレータによって変わる。
Makefile
ジェネレータがMakefileの場合、単一のビルドオプションしか保持できないので、Configure / Generate時にビルドタイプを指定する。
ビルドタイプは、キャッシュ変数CMAKE_BUILD_TYPEに値を設定することで指定できる。
cmake -DCMAKE_INSTALL_PREFIX=<インストールディレクトリ> -DCMAKE_BUILD_TYPE=Release <ソースコードがあるディレクトリ>
次に、生成されたMakefileを使用してビルドする。
cmake --build .
CMakeでは、標準でDebug、Release、MinSizeRel、RelWithDebInfoの4種類のビルドタイプが用意されている。
それぞれどのようなビルドオプションが採用されるかはコンパイラによって違うので、別途調べること。
IDE
ジェネレータがVisual StudioやXcodeといったIDEの場合、プロジェクトファイルに複数のビルドタイプを保持できるので、
Configure / Generate時にビルドタイプを指定する必要はない。
cmake -DCMAKE_INSTALL_PREFIX=<インストールディレクトリ> <ソースコードがあるディレクトリ>
次に、ビルドの実行時に、どのビルドタイプを使用するかを指定する。
cmake --build . --config Release
プロジェクトファイルに含めるビルドタイプを、ReleaseとRelWithDebInfoの2つに限定する場合は、
キャッシュ変数CMAKE_CONFIGURATION_TYPESにRelease;RelWithDebInfoのように値を設定する。