【Ubuntu】C++チュートリアルのビルドと実行(CMake、gcc)
UbuntuでCMakeとgccを使ったAGXのC++チュートリアルのビルド手順について説明する。
AGXに同梱されている
<AGX_DIR>\CMakeLists.txt
を使う。参考文献
確認環境
OS: Ubuntu 22.04 LTS
AGXバージョン: agx-2.38.0.1-amd64-ubuntu_22.04.deb
CMakeバージョン: 3.22.1 (3.10以上であること)
gcc/g++バージョン: 11.4.0
事前準備
ターミナルを開き、ビルドに必要なツールをインストールする。
sudo apt update && sudo apt install build-essential cmake
g++ --version # gcc/g++のインストール確認
cmake --version # cmakeのインストールとバージョンの確認
注釈
cmakeをCUIまたはGUIで使えるツールも提供されている。追加でインストールして使う。
sudo apt install cmake-curses-gui # CUI
sudo apt install cmake-qt-gui # GUI
ビルド
プログラムのビルドには次のビルドシステムを使う方法がある。
注釈
cmake実行時に次のWarningが表示されるが無視してよい。
CMake Warning (dev) at /usr/share/cmake-3.16/Modules/FindOpenGL.cmake:275 (message):
Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when
available. Run "cmake --help-policy CMP0072" for policy details. Use the
cmake_policy command to set the policy and suppress this warning.
Makeビルド
ターミナルを開き、次のコマンドを実行する。
<AGX_DIR>/setup_env.bash # AGXの環境変数の設定。.bashrcで設定している場合はスキップしてよい。
mkdir /tmp/agxBuild # ビルドディレクトリの作成
cd /tmp/agxBuild
cmake <AGX_DIR> # cmakeの実行
make -j7 # makeビルド実行
注釈
makeコマンドのオプション -j
はjobの並列実行数である。
適切に設定すると、ビルド時間を短縮できる。
job数の具体的な数はインターネットで調べると、様々な議論がでてくる。
ここでは [lpha_z2018] を参考にコア数 + 1とする。
コア数は grep 'cpu cores' /proc/cpuinfo | sort -u | sed 's/.*: //'
で確認できる。
Ninjaビルド
ターミナルを開き、ninja-buildをインストールする。
sudo apt update && sudo apt install ninja-build
インストール後、次のコマンドでビルドする。
<AGX_DIR>/setup_env.bash # AGXの環境変数の設定。.bashrcで設定している場合はスキップしてよい。
mkdir /tmp/agxBuild2 # ビルドディレクトリの作成
cd /tmp/agxBuild2
cmake -GNinja <AGX_DIR> # cmakeの実行
ninja # ninjaビルド実行
プログラムの実行
注釈
AGXの環境変数が設定されたターミナルまたは環境でプログラムを実行すること。 プログラムはAGXの環境変数を利用して、AGXのダイナミックリンクライブラリとリンクする。 環境変数が設定されていないと、プログラム実行時にリンクエラーがでる。
ターミナルを開き、次のコマンドを実行する。
実行ファイルはビルドディレクトリ <BUILD_DIR>
にある。
<AGX_DIR>/setup_env.bash # AGXの環境変数の設定。.bashrcで設定している場合はスキップしてよい。
cd <BUILD_DIR>
./tutorial_bodies
参考: MakeとNinjaのビルド時間の比較
MakeとNinjaでビルド時間の差を確認した。 上記のビルド方法にtimeをつけてビルドを実行し、timeのreal値(ビルド時間)を確認した。
time make
time make -j7
time ninja
各測定の前にはキャッシュを効かせないようにメモリキャッシュのクリアをした。
free -h # メモリの使用状況の確認
sync # キャッシュの内容をディスクに書き込む
grep 'Dirty' /proc/meminfo # Dirty: 0 kBを確認
echo 3 | sudo tee /proc/sys/vm/drop_caches # メモリキャッシュのクリア
free --h # buff/cacheが開放されていることを確認
測定結果を次表に示す。 ninjaが最もビルド時間が短く、make -j7よりも約16秒早かった。
測定項目 |
ビルド時間 |
---|---|
make |
8m0.849s |
make -j7 |
1m56.458s |
ninja |
1m40.820s |
lpha_z. makeの並列オプションは何を指定するべきか. よーる - はてなブログ, URL: https://lpha-z.hatenablog.com/entry/2018/12/30/231500, (参照 2024-8-27).