CMakeでターゲットにリンクされるライブラリの構成を制御する「IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG」


詳細

「IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG」は、ターゲットにリンクされるライブラリごとに設定できます。それぞれのライブラリに対して、以下のオプションを指定することができます。

  • RELWITHDEBINFO
    リリースビルドでデバッグ情報を生成するかどうかを指定します。
  • MINSIZE
    最小サイズビルド用の構成オプションを指定します。
  • RELEASE
    リリースビルド用の構成オプションを指定します。
  • DEBUG
    デバッグ情報の有無を指定します。

これらのオプションは、ライブラリのコンパイルとリンク時に使用されます。例えば、「DEBUG」オプションを指定すると、ライブラリはデバッグ情報付きでコンパイルされます。

以下の例は、「IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG」を使用して、ライブラリ「foo」と「bar」の構成オプションを指定する方法を示しています。

target_link_libraries(mytarget foo bar)

set_target_properties(mytarget PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_foo DEBUG
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_bar RELEASE
)

この例では、ライブラリ「foo」はデバッグ情報付きでコンパイルされ、ライブラリ「bar」はリリースビルド用の構成オプションでコンパイルされます。



target_link_libraries(mytarget foo bar)

set_target_properties(mytarget PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_foo DEBUG
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_bar RELEASE
)

例2:複数のライブラリに対して共通の構成オプションを指定

この例では、複数のライブラリに対して共通の構成オプションを指定しています。

target_link_libraries(mytarget foo bar baz)

set_target_properties(mytarget PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_foo DEBUG
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_bar DEBUG
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_baz DEBUG
)

例3:構成オプションを環境変数から取得

この例では、構成オプションを環境変数から取得しています。

set(DEBUG_CONFIG ON CACHE BOOL "Build with debug information")

target_link_libraries(mytarget foo bar)

set_target_properties(mytarget PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_foo ${DEBUG_CONFIG}
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_bar ${DEBUG_CONFIG}
)

例4:構成オプションをカスタム関数から取得

この例では、構成オプションをカスタム関数から取得しています。

function get_debug_config()
  if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    set(DEBUG_CONFIG ON)
  else()
    set(DEBUG_CONFIG OFF)
  endif()
endfunction()

get_debug_config()

target_link_libraries(mytarget foo bar)

set_target_properties(mytarget PROPERTIES
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_foo ${DEBUG_CONFIG}
  IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG_bar ${DEBUG_CONFIG}
)

これらの例は、CMakeにおける「IMPORTED_LINK_INTERFACE_LIBRARIES_CONFIG」の使用方法を理解するのに役立ちます。



CMAKE_LINK_DEPENDS

「CMAKE_LINK_DEPENDS」プロパティは、ターゲットにリンクされるライブラリを指定するために使用されます。このプロパティを使用して、ライブラリの構成オプションを制御することもできます。

target_link_libraries(mytarget foo bar)

set(CMAKE_LINK_DEPENDS_foo DEBUG)
set(CMAKE_LINK_DEPENDS_bar RELEASE)

ターゲットプロパティ

ターゲットプロパティを使用して、ライブラリの構成オプションを直接設定することもできます。

target_link_libraries(mytarget foo bar)

set_target_properties(foo PROPERTIES DEBUG)
set_target_properties(bar PROPERTIES RELEASE)

カスタムターゲット

カスタムターゲットを使用して、ライブラリの構成オプションを制御することもできます。

add_custom_target(foo_debug COMMAND ${CMAKE_CXX_COMPILER} -o foo_debug.a foo.cpp ${CMAKE_DEBUG_FLAGS})
add_custom_target(bar_release COMMAND ${CMAKE_CXX_COMPILER} -o bar_release.a bar.cpp ${CMAKE_RELEASE_FLAGS})

target_link_libraries(mytarget foo_debug bar_release)
  • カスタムターゲットを使用してライブラリの構成オプションを制御する方法は、CMake 2.4以降で使用できます。
  • ターゲットプロパティを使用してライブラリの構成オプションを設定する方法は、CMake 2.8以降で使用できます。
  • 「CMAKE_LINK_DEPENDS」プロパティは、CMake 3.0以降で使用できます。