📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

ページの作成:「== 概要 == <br><br> == プリプロセッサの定義 == 特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。<br> <br> 例えば、デバッグビルドの場合にプリプロセッサマクロとして_DEBUGを定義する場合、<br> <code>target_compile_definitions</code>コマンドを使用して、その定義をデバッグビルドにのみ適用するように指定する。<br> <syntaxhighli…」
 
文字列「__FORCETOC__」を「{{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This pag…
 
(同じ利用者による、間の4版が非表示)
4行目: 4行目:


== プリプロセッサの定義 ==
== プリプロセッサの定義 ==
==== target_compile_definitionsコマンド (推奨) ====
特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。<br>
特定のビルドタイプに基づいて、プリプロセッサ定義を設定することがよくある。<br>
<br>
<br>
23行目: 24行目:
この機能を使用することにより、デバッグビルドとリリースビルドで異なるプリプロセッサマクロを簡単に管理できる。<br>
この機能を使用することにより、デバッグビルドとリリースビルドで異なるプリプロセッサマクロを簡単に管理できる。<br>
* PUBLIC
* PUBLIC
*: 定義がそのターゲット自身とそれをリンクするターゲットの両方に適用される。
*: ターゲット自身とそれをリンクするターゲットの両方に適用される。
* PRIVATE
*: ターゲットのソースコードでのみ適用される。
* INTERFACE
* INTERFACE
*: 定義がそのターゲットをリンクする他のターゲットにのみ適用される。
*: ターゲットをリンクする他のターゲットにのみ適用される。
<br>
 
==== add_definitionsコマンド (非推奨) ====
<code>add_definitions</code>コマンドの使用は避けるべきである。<br>
<br>
これは、以下に示すような問題があるからである。<br>
* プロジェクト全体に影響を与えてしまう。
* ビルド依存性の管理が難しくなる。
* コンパイラの最適化を阻害する可能性がある。
<br>
推奨されるコマンドは、<code>target_compile_definitions</code>コマンドである。<br>
このコマンドは、ターゲット単位で定義を設定できるため、上記の問題を回避することができる。<br>
<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>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]
[[カテゴリ:C]][[カテゴリ:C++]][[カテゴリ:Qt]]