【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_z2018]

lpha_z. makeの並列オプションは何を指定するべきか. よーる - はてなブログ, URL: https://lpha-z.hatenablog.com/entry/2018/12/30/231500, (参照 2024-8-27).