MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
CMake - プリプロセッサのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
CMake - プリプロセッサ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == プリプロセッサの定義 == ==== target_compile_definitionsコマンド (推奨) ==== 特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。<br> <br> 例えば、デバッグビルドの場合にプリプロセッサマクロとして_DEBUGを定義する場合、<br> <code>target_compile_definitions</code>コマンドを使用して、その定義をデバッグビルドにのみ適用するように指定する。<br> <syntaxhighlight lang="cmake"> # デバッグビルドの場合にのみ_DEBUGを定義する target_compile_definitions(<プロジェクト名> PRIVATE $<$<CONFIG:Debug>:_DEBUG> ) </syntaxhighlight> <br> 上記の例では、$<CONFIG:Debug>ジェネレータ式を使用している。<br> これは、現在のビルドがデバッグビルド(Debug)である場合に_DEBUGマクロを定義するものである。<br> <br> <code>target_compile_definitions</code>の第2引数に<code>PRIVATE</code>キーワードを使用しているため、このプリプロセッサはこのターゲットにのみ適用されて、他のターゲットには影響を与えない。<br> <br> もし、ライブラリ等で他のターゲットにもこの定義を適用する場合は、<code>PUBLIC</code>または<code>INTERFACE</code>キーワードを使用する。<br> この機能を使用することにより、デバッグビルドとリリースビルドで異なるプリプロセッサマクロを簡単に管理できる。<br> * PUBLIC *: ターゲット自身とそれをリンクするターゲットの両方に適用される。 * PRIVATE *: ターゲットのソースコードでのみ適用される。 * INTERFACE *: ターゲットをリンクする他のターゲットにのみ適用される。 <br> ==== add_definitionsコマンド (非推奨) ==== <code>add_definitions</code>コマンドの使用は避けるべきである。<br> <br> これは、以下に示すような問題があるからである。<br> * プロジェクト全体に影響を与えてしまう。 * ビルド依存性の管理が難しくなる。 * コンパイラの最適化を阻害する可能性がある。 <br> 推奨されるコマンドは、<code>target_compile_definitions</code>コマンドである。<br> このコマンドは、ターゲット単位で定義を設定できるため、上記の問題を回避することができる。<br> <br><br> == 使用例 == ==== バージョンによりプリプロセッサを定義する ==== バージョンが特定の値未満の場合に特定のプリプロセッサを定義する場合、<br> CMakeのバージョン比較機能と<code>target_compile_definitions</code>コマンドを組み合わせて使用する。<br> <br> ===== 推奨する方法 ===== # まず、プロジェクトのバージョンを定義する。 # 次に、条件分岐でバージョンを比較して、条件に合致する場合にのみプリプロセッサを定義する。 <br> 以下の例では、メジャーバージョンが0より大きい場合、または、メジャーバージョンが0でマイナーバージョンが2以上の場合に、処理を実行している。<br> これにより、将来のバージョンに対して柔軟にソースコードを記述することができる。<br> <syntaxhighlight lang="cmake"> project(MyProject VERSION 0.1.0) </syntaxhighlight> <br> <syntaxhighlight lang="cmake"> target_compile_definitions(MyProject PRIVATE -DMYPROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} -DMYPROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} ) </syntaxhighlight> <br> <syntaxhighlight lang="c++"> #if MYPROJECT_VERSION_MAJOR > 0 || (MYPROJECT_VERSION_MAJOR == 0 && MYPROJECT_VERSION_MINOR >= 2) // MyProject 0.2以降の処理を記述 #endif </syntaxhighlight> <br> ===== 非推奨の方法 ===== # まず、プロジェクトのバージョンを定義する。 # 次に、条件分岐でバージョンを比較して、条件に合致する場合にのみプリプロセッサを定義する。 <syntaxhighlight lang="cmake"> project(MyProject VERSION 0.1.0) # ターゲットを定義 add_executable(MyProject main.cpp ) # バージョンを比較して、条件に合致する場合はプリプロセッサを定義 # 以下の例では、バージョンが0.1.0未満かどうかを確認して、合致している場合はMY_VERSION_BELOW_0_1_0プリプロセッサを定義 if(PROJECT_VERSION VERSION_LESS 0.1.0) target_compile_definitions(MyProject PRIVATE MY_VERSION_BELOW_0_1_0 ) endif() </syntaxhighlight> <br> 上記のようなプリプロセッサは、プリプロセッサディレクティブを使用して条件付きで特定のソースコードを含めたり除外する場合に使用できる。<br> 例えば、C++のソースコードにおいて、以下に示すように使用することができる。<br> <br> この方法により、異なるバージョンのプロジェクトに対して、条件付きでソースコードをコンパイルする複雑なロジックが実装できる。<br> <syntaxhighlight lang="c++"> #ifdef MY_VERSION_BELOW_0_1_0 // バージョンが0.1.0未満の場合にのみコンパイルされるコード #endif </syntaxhighlight> <br> <u>※注意</u><br> <u>ただし、この方法では新しいバージョンが追加されるごとにプリプロセッサを更新する必要がある。</u><br> <u>より柔軟な方法は、バージョン番号を個別の部分に分割することである。</u><br> <br><br> __FORCETOC__ [[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]
CMake - プリプロセッサ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse