プログラミング初心者でも安心!CMakeの「IMPORTED_IMPLIB_CONFIG」でライブラリ設定を楽々マスター


IMPORTED_IMPLIB_CONFIG は、CMake の Properties: Targets プロパティの一つで、インポートされたライブラリのインクルードディレクトリとライブラリディレクトリを設定するために使用されます。このプロパティは、インポートされたライブラリが CMake プロジェクトに統合される際に、必要なヘッダーファイルとライブラリファイルへのパスを指定します。

使用方法

IMPORTED_IMPLIB_CONFIG プロパティは、以下の形式で使用されます。

set_property(TARGET ${TARGET} PROPERTY IMPORTED_IMPLIB_CONFIG "${CONFIG_DIR}")

ここで、

  • ${CONFIG_DIR} は、インクルードディレクトリとライブラリディレクトリを含むディレクトリのパスです。
  • ${TARGET} は、設定対象のターゲットの名前です。

以下の例では、IMPORTED_IMPLIB_CONFIG プロパティを使用して、Foo という名前のターゲットに include ディレクトリと lib ディレクトリを設定しています。

target_sources(Foo PRIVATE Foo.c)

set_property(TARGET Foo PROPERTY IMPORTED_IMPLIB_CONFIG "/usr/local/lib/cmake/Foo")

この例では、Foo ターゲットは /usr/local/lib/cmake/Foo ディレクトリ内の include ディレクトリにあるヘッダーファイルと、lib ディレクトリにあるライブラリファイルを使用することができます。

詳細

IMPORTED_IMPLIB_CONFIG プロパティは、以下の値を設定することができます。

  • キャッシュファイル
    設定値をキャッシュするファイルのパス
  • ライブラリディレクトリ
    ライブラリファイルのパス
  • インクルードディレクトリ
    ヘッダーファイルのパス

これらの値は、 ; で区切って複数指定することができます。

  • IMPORTED_IMPLIB_CONFIG プロパティは、CMake のバージョン 3.1 以降で使用することができます。
  • このプロパティは、target_include_directories()target_link_libraries() などの他の CMake コマンドよりも優先されます。
  • IMPORTED_IMPLIB_CONFIG プロパティは、インポートされたライブラリに対してのみ使用することができます。


target_sources(Foo PRIVATE Foo.c)

set_property(TARGET Foo PROPERTY IMPORTED_IMPLIB_CONFIG "/usr/local/lib/cmake/Foo")

例2: キャッシュファイルを設定する

以下のコードは、IMPORTED_IMPLIB_CONFIG プロパティの設定値をキャッシュファイルに保存する例です。

target_sources(Foo PRIVATE Foo.c)

set_property(TARGET Foo PROPERTY IMPORTED_IMPLIB_CONFIG "/usr/local/lib/cmake/Foo;CACHE")

例3: 複数のインクルードディレクトリとライブラリディレクトリを設定する

以下のコードは、Foo という名前のターゲットに複数のインクルードディレクトリとライブラリディレクトリを設定する例です。

target_sources(Foo PRIVATE Foo.c)

set_property(TARGET Foo PROPERTY IMPORTED_IMPLIB_CONFIG "/usr/local/lib/cmake/Foo/include1;/usr/local/lib/cmake/Foo/include2;/usr/local/lib/cmake/Foo/lib1;/usr/local/lib/cmake/Foo/lib2")

例4: 環境変数を使用してインクルードディレクトリとライブラリディレクトリを設定する

以下のコードは、環境変数 FOO_DIR を使用して Foo という名前のターゲットにインクルードディレクトリとライブラリディレクトリを設定する例です。

target_sources(Foo PRIVATE Foo.c)

set(FOO_DIR "/usr/local/lib/cmake/Foo")

set_property(TARGET Foo PROPERTY IMPORTED_IMPLIB_CONFIG "${FOO_DIR}/include;${FOO_DIR}/lib")

例5: ターゲット固有のインクルードディレクトリとライブラリディレクトリを設定する

以下のコードは、Foo という名前のターゲットにターゲット固有のインクルードディレクトリとライブラリディレクトリを設定する例です。

target_sources(Foo PRIVATE Foo.c)

set_target_properties(Foo PROPERTIES INCLUDE_DIRECTORIES "/usr/local/lib/cmake/Foo/include" LINK_DIRECTORIES "/usr/local/lib/cmake/Foo/lib")
  • CMake のバージョンやプラットフォームによって、動作が異なる場合があります。
  • 上記のコードはあくまで例であり、実際の状況に合わせて変更する必要があります。


代替手段

  • カスタム CMake モジュール
    複雑な設定が必要な場合は、カスタム CMake モジュールを作成することができます。
  • find_package() コマンド
    このコマンドは、特定のパッケージを検索し、そのパッケージのインクルードディレクトリとライブラリディレクトリを自動的に設定します。
  • target_link_libraries() コマンド
    このコマンドは、ターゲットがリンクするライブラリを指定するために使用されます。これらのライブラリのインクルードディレクトリとライブラリディレクトリは、CMake によって自動的に検索されます。
  • target_include_directories() コマンド
    このコマンドは、ターゲットが使用するインクルードディレクトリを指定するために使用されます。

各方法の詳細

  • target_include_directories() コマンド
target_include_directories(Foo PRIVATE "/usr/local/lib/cmake/Foo/include")

この例では、Foo ターゲットは /usr/local/lib/cmake/Foo/include ディレクトリにあるヘッダーファイルを使用することができます。

  • target_link_libraries() コマンド
target_link_libraries(Foo PRIVATE FooLib)

この例では、Foo ターゲットは FooLib ライブラリにリンクされます。FooLib ライブラリのインクルードディレクトリとライブラリディレクトリは、CMake によって自動的に検索されます。

  • find_package() コマンド
find_package(Foo REQUIRED)

この例では、Foo パッケージが検索され、そのパッケージのインクルードディレクトリとライブラリディレクトリが自動的に設定されます。

  • カスタム CMake モジュール

カスタム CMake モジュールを作成するには、CMake のドキュメントを参照してください。

  • 使用する方法は、プロジェクトの要件によって異なります。
  • 上記の方法は、IMPORTED_IMPLIB_CONFIG プロパティと互換性がない場合があります。