CMake - プリプロセッサ

提供:MochiuWiki : SUSE, EC, PCB
2024年3月22日 (金) 19:06時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == プリプロセッサの定義 == 特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。<br> <br> 例えば、デバッグビルドの場合にプリプロセッサマクロとして_DEBUGを定義する場合、<br> <code>target_compile_definitions</code>コマンドを使用して、その定義をデバッグビルドにのみ適用するように指定する。<br> <syntaxhighli…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



プリプロセッサの定義

特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。

例えば、デバッグビルドの場合にプリプロセッサマクロとして_DEBUGを定義する場合、
target_compile_definitionsコマンドを使用して、その定義をデバッグビルドにのみ適用するように指定する。

 # デバッグビルドの場合にのみ_DEBUGを定義する
 target_compile_definitions(<プロジェクト名> PRIVATE
    $<$<CONFIG:Debug>:_DEBUG>
 )


上記の例では、$<CONFIG:Debug>ジェネレータ式を使用している。
これは、現在のビルドがデバッグビルド(Debug)である場合に_DEBUGマクロを定義するものである。

target_compile_definitionsの第2引数にPRIVATEキーワードを使用しているため、このプリプロセッサはこのターゲットにのみ適用されて、他のターゲットには影響を与えない。

もし、ライブラリ等で他のターゲットにもこの定義を適用する場合は、PUBLICまたはINTERFACEキーワードを使用する。
この機能を使用することにより、デバッグビルドとリリースビルドで異なるプリプロセッサマクロを簡単に管理できる。

  • PUBLIC
    定義がそのターゲット自身とそれをリンクするターゲットの両方に適用される。
  • INTERFACE
    定義がそのターゲットをリンクする他のターゲットにのみ適用される。