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

文字列「__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…
 
(同じ利用者による、間の2版が非表示)
122行目: 122行目:
* generalオプション
* generalオプション
*: 項目の前にgeneralオプションを付加する場合、全てのビルド構成に対して項目を追加するように指定する。
*: 項目の前にgeneralオプションを付加する場合、全てのビルド構成に対して項目を追加するように指定する。
<br><br>
== ライブラリの検索 ==
find_libraryコマンドを使用して、特定の名前のライブラリを検索することができる。<br>
* NAMESオプション
*: ライブラリ名を指定することにより、libプレフィックス無しでライブラリを検索する。
* PATHSオプション
*: 任意
*: ライブラリを検索する場所を指定する。
*: 必要に応じて、パスを調整する。
* NO_DEFAULT_PATHオプション
*: 任意
*: 指定したパスのみを検索する。
<br>
以下の例では、動的ライブラリであるlibsmbclient.soファイルを検索して使用している。<br>
もし、ライブラリの検索に失敗した場合、エラーメッセージを表示してビルドを停止する。<br>
ターゲット (実行可能ファイルまたはライブラリ) を定義する。<br>
target_link_librariesコマンドを使用して、検索で発見したライブラリをターゲットにリンクする。<br>
<syntaxhighlight lang="cmake">
# ライブラリの検索
find_library(SMBCLIENT_LIBRARY
    NAMES sambclient
    PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib  # PATHオプションは任意
    NO_DEFAULT_PATH                                            # NO_DEFAULT_PATHオプションは任意
)
# ライブラリの検索に成功したかどうかを確認
if(NOT SMBCLIENT_LIBRARY)
    message(FATAL_ERROR "libsmbclient.so library not found")
endif()
# ターゲット (実行可能ファイルまたはライブラリ) を定義
# Qtの場合は、qt_add_executableコマンドを使用する
add_executable(<ターゲット名>
    <ソースファイル 1>
    <ソースファイル 2>
    # ...略
)
# ターゲットにライブラリをリンク
target_link_libraries(<ターゲット名>
    ${SMBCLIENT_LIBRARY}
    # ...略
)
</syntaxhighlight>
<br><br>
== ライブラリパスの指定 (target_link_directoriesコマンド) ==
<code>target_link_directories</code>コマンドは、特定のターゲット (実行可能ファイルやライブラリ) に対して、リンカが追加のライブラリを検索する場所を指定する。<br>
<br>
target_link_directoriesコマンドの特徴を以下に示す。<br>
* スコープの明確化
*: <code>target_link_directories</code>コマンドは、特定のターゲットに対してのみリンクディレクトリを設定するため、影響範囲が明確である。
* より細かい制御
*: ターゲット単位で設定できるため、プロジェクト全体ではなく必要なターゲットにのみ適用できる。
* ジェネレータ式の対応
*: <code>target_link_directories</code>コマンドはジェネレータ式をサポートしており、より柔軟な設定が可能である。
*: ${CMAKE_CURRENT_SOURCE_DIR}のようなCMake変数や、$<...>のようなジェネレータ式が使用できる。
* 順序
*: 複数のディレクトリを指定する場合、最初に指定したディレクトリから検索する。
<br>
基本的な構文を以下に示す。<br>
<syntaxhighlight lang="cmake">
target_link_directories(<ターゲット名>
    <INTERFACE|PUBLIC|PRIVATE> [items1...]        # INTERFACE, PUBLIC, PRIVATE: リンクディレクトリの適用スコープ
    [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...]  # INTERFACE, PUBLIC, PRIVATE: リンクディレクトリの適用スコープ
)
</syntaxhighlight>
<br>
スコープの意味を以下に示す。<br>
* PRIVATE
*: 指定したディレクトリは、このターゲットのみに適用される。
*: このターゲットに依存する他のターゲットには伝播しない。
*: <br>
* INTERFACE
*: このターゲットには適用されず、このターゲットに依存する他のターゲットに伝播する。
*: 主にインターフェースライブラリで使用する。
*: <br>
* PUBLIC
*: PRIVATEとINTERFACEの組み合わせである。
*: このターゲットとそれに依存する他のターゲットの両方に適用される。
<br>
以下の例では、ターゲット1 (mylib) は、/path/to/private/libsおよび/path/to/public/libsからライブラリを検索する。<br>
ターゲット2 (myapp) は、/path/to/public/libsおよび/path/to/interface/libsからライブラリを検索する。 (mylibに依存しているため)<br>
<syntaxhighlight lang="cmake">
add_library(mylib STATIC
    source1.cpp
    source2.cpp
)
target_link_directories(mylib
    PRIVATE    /path/to/private/libs
    PUBLIC    /path/to/public/libs
    INTERFACE  /path/to/interface/libs
)
add_executable(myapp
    main.cpp
)
target_link_libraries(myapp PRIVATE
    mylib
)
</syntaxhighlight>
<br><br>
<br><br>


== ライブラリパスの指定 (link_directoriesコマンド) ==
== ライブラリパスの指定 (link_directoriesコマンド) ==
<u><code>link_directories</code>コマンドの使用は非推奨である。</u><br>
<u>代わりに、<code>target_link_directories</code>コマンドを使用することが推奨されている。</u><br>
<br>
ライブラリパスを指定する場合、<code>link_directories</code>コマンドを使用する。<br>
ライブラリパスを指定する場合、<code>link_directories</code>コマンドを使用する。<br>
  <syntaxhighlight lang="cmake">
  <syntaxhighlight lang="cmake">
146行目: 253行目:
<br><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]]