CMakeでC++モジュールを簡単セットアップ:"CXX_MODULE_DIRS"プロパティの徹底解説
CMakeの"Properties: Targets"における"CXX_MODULE_DIRS"は、ターゲットのデフォルトC++モジュールセットのベースディレクトリをセミコロンで区切ったリストとして指定するプロパティです。C++モジュールは、モジュールインターフェースファイル(.mod)とモジュールソースファイル(.ixx)で構成されるファイルセットです。
詳細
- "CXX_MODULE_DIRS"プロパティは、CMakeバージョン3.28以降でのみ使用できます。
- "CXX_MODULE_DIRS"プロパティは、ターゲットのデフォルトC++モジュールセットにのみ適用されます。名前付きC++モジュールセットのベースディレクトリを指定するには、
CXX_MODULE_DIRS_<NAME>
プロパティを使用します。 - "CXX_MODULE_DIRS"プロパティは、ジェネレータ式をサポートします。これは、ターゲットの生成時にプロパティ値を動的に計算することを可能にします。
- "CXX_MODULE_DIRS"は、通常、
target_sources(FILE_SET)
コマンドによって設定されます。このコマンドは、モジュールインターフェースファイルとモジュールソースファイルを含むファイルセットを指定します。
例
target_sources(mytarget PUBLIC mymodule.mod mymodule.ixx)
set_property(TARGET mytarget PROPERTY CXX_MODULE_DIRS "/usr/local/lib/modules/mymodule")
この例では、mytarget
ターゲットのデフォルトC++モジュールセットのベースディレクトリが/usr/local/lib/modules/mymodule
に設定されます。
- CMakeは、C++モジュールをサポートするために、いくつかの新しいプロパティとコマンドを導入しました。"CXX_MODULE_DIRS"プロパティはその1つです。
- C++モジュールは、モジュラープログラミングをサポートする新しいC++機能です。モジュラープログラミングは、コードの再利用性と保守性を向上させるのに役立ちます。
cmake_minimum_required(VERSION 3.28)
project(myproject)
add_executable(mytarget mymodule.mod mymodule.ixx)
# ターゲットのデフォルトC++モジュールセットのベースディレクトリを指定します。
set_property(TARGET mytarget PROPERTY CXX_MODULE_DIRS "/usr/local/lib/modules/mymodule")
このコードは、以下の操作を実行します。
- CMakeの最低バージョンを3.28に設定します。
myproject
という名前のプロジェクトを作成します。mytarget
という名前の実行可能ファイルを追加します。この実行可能ファイルは、mymodule.mod
とmymodule.ixx
という2つのファイルで構成されます。mytarget
ターゲットのデフォルトC++モジュールセットのベースディレクトリを/usr/local/lib/modules/mymodule
に設定します。
このコードを実行すると、mytarget
という名前の実行可能ファイルが生成されます。この実行可能ファイルは、/usr/local/lib/modules/mymodule
ディレクトリにあるC++モジュールを使用することができます。
以下の追加例では、CXX_MODULE_DIRS
プロパティとジェネレータ式を使用して、ターゲットの生成時にプロパティ値を動的に計算する方法を示しています。
cmake_minimum_required(VERSION 3.28)
project(myproject)
add_executable(mytarget mymodule.mod mymodule.ixx)
# ターゲットの生成ディレクトリに基づいて、デフォルトC++モジュールセットのベースディレクトリを動的に設定します。
set(CXX_MODULE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/modules")
set_property(TARGET mytarget PROPERTY CXX_MODULE_DIRS "${CXX_MODULE_DIRS}")
- CMakeの最低バージョンを3.28に設定します。
myproject
という名前のプロジェクトを作成します。mytarget
という名前の実行可能ファイルを追加します。この実行可能ファイルは、mymodule.mod
とmymodule.ixx
という2つのファイルで構成されます。CXX_MODULE_DIRS
プロパティを、ターゲットの生成ディレクトリに基づいて動的に設定します。mytarget
ターゲットのデフォルトC++モジュールセットのベースディレクトリを、CXX_MODULE_DIRS
プロパティの値に設定します。
このコードを実行すると、mytarget
という名前の実行可能ファイルが生成されます。この実行可能ファイルは、ターゲットの生成ディレクトリ内のmodules
ディレクトリにあるC++モジュールを使用することができます。
target_module_dir()コマンド
target_module_dir()
コマンドは、特定のモジュールセットのベースディレクトリを指定するために使用できます。このコマンドは、"CXX_MODULE_DIRS"プロパティよりも優先されます。
target_module_dir(mymodule ${MYMODULE_DIR})
この例では、mymodule
という名前のモジュールセットのベースディレクトリがMYMODULE_DIR
変数の値に設定されます。
target_compile_options()コマンド
target_compile_options()
コマンドは、ターゲットのコンパイルオプションを設定するために使用できます。このコマンドを使用して、-module-dir
オプションを指定し、モジュールセットのベースディレクトリを指定することができます。
target_compile_options(mytarget PRIVATE -module-dir ${MYMODULE_DIR})
この例では、mymodule
という名前のモジュールセットのベースディレクトリがMYMODULE_DIR
変数の値に設定され、mytarget
ターゲットのコンパイルオプションに追加されます。
環境変数
MODULE_DIRS
環境変数を設定して、デフォルトのC++モジュールセットのベースディレクトリを指定することができます。
export MODULE_DIRS="/usr/local/lib/modules"
この例では、デフォルトのC++モジュールセットのベースディレクトリが/usr/local/lib/modules
に設定されます。
キャッシュ
CMakeは、モジュールセットのベースディレクトリをキャッシュに保存することができます。キャッシュ内のディレクトリは、target_module_dir()
コマンドやtarget_compile_options()
コマンドを使用して指定されたディレクトリよりも優先されます。
キャッシュ内のディレクトリをクリアするには、clear_cache()
コマンドを使用します。
clear_cache()