CMakeの"CMAKE_INSTALL_NAME_DIR"変数:Appleプラットフォームにおける共有ライブラリと実行可能ファイルのインストールをマスター


CMAKE_INSTALL_NAME_DIR は、CMakeのターゲットがインストールされる際のディレクトリ名を指定するために使用される変数です。これは主にAppleプラットフォームにおいて重要であり、共有ライブラリや実行可能ファイルなどのインストール先を制御する役割を果たします。

役割

CMAKE_INSTALL_NAME_DIR は、以下の2つの主要な役割を担います。

  1. インストールディレクトリの指定
    ターゲットがインストールされるディレクトリ名を決定します。これは、CMAKE_INSTALL_PREFIX などの他の変数と組み合わせて使用されます。
  2. ランタイムパス設定
    インストールされたターゲットのランタイムパスを設定します。これは、アプリケーションが他の共有ライブラリや実行可能ファイルを見つける際に重要となります。

設定方法

CMAKE_INSTALL_NAME_DIR は、CMakeLists.txtファイル内で設定することができます。以下の例をご覧ください。

set(CMAKE_INSTALL_NAME_DIR "@executable_path/../PlugIns")

この例では、@executable_path は実行可能ファイルのディレクトリを指し、../PlugIns はそのディレクトリから1階上の PlugIns ディレクトリを指します。つまり、ターゲットは PlugIns ディレクトリにインストールされます。

注意点

CMAKE_INSTALL_NAME_DIR を設定する際には、以下の点に注意する必要があります。

  • CMAKE_INSTALL_NAME_DIR は、ターゲットのランタイムパスだけでなく、インストール後のファイル名にも影響を与える可能性があります。
  • ターゲットの種類によって、CMAKE_INSTALL_NAME_DIR の解釈が異なる場合があります。
  • プラットフォームによってデフォルト値が異なる場合があります。詳細は、CMakeのドキュメントを参照してください。
  • CMAKE_INSTALL_NAME_DIR は、INSTALL_NAME_DIR ターゲットプロパティと密接に関連しています。

以下の例は、CMAKE_INSTALL_NAME_DIR を使用して共有ライブラリをインストールする方法を示しています。

cmake_minimum_required(VERSION 3.10)

project(MyLibrary)

set(CMAKE_INSTALL_NAME_DIR "@executable_path/../lib")

add_library(MyLibrary SHARED ${SOURCES})

target_link_libraries(MyLibrary OtherLibrary)

install(TARGETS MyLibrary DESTINATION lib)

この例では、MyLibrary という名前の共有ライブラリが作成され、lib ディレクトリにインストールされます。



cmake_minimum_required(VERSION 3.10)

project(MyLibrary)

set(CMAKE_INSTALL_NAME_DIR "@executable_path/../lib")

add_library(MyLibrary SHARED ${SOURCES})

target_link_libraries(MyLibrary OtherLibrary)

install(TARGETS MyLibrary DESTINATION lib)

例2:実行可能ファイルのインストール

cmake_minimum_required(VERSION 3.10)

project(MyApplication)

set(CMAKE_INSTALL_NAME_DIR "@executable_path")

add_executable(MyApplication ${SOURCES})

target_link_libraries(MyApplication MyLibrary)

install(TARGETS MyApplication DESTINATION bin)

この例では、MyApplication という名前の実行可能ファイルが作成され、bin ディレクトリにインストールされます。

例3:カスタムディレクトリ名の指定

cmake_minimum_required(VERSION 3.10)

project(MyProject)

set(CMAKE_INSTALL_NAME_DIR "MyCustomDir")

add_library(MyLibrary SHARED ${SOURCES})

target_link_libraries(MyLibrary OtherLibrary)

install(TARGETS MyLibrary DESTINATION lib/MyCustomDir)

この例では、MyLibrary という名前の共有ライブラリが作成され、lib/MyCustomDir ディレクトリにインストールされます。

  • CMAKE_INSTALL_NAME_DIR は、CMAKE_INSTALL_PREFIX などの他の変数と組み合わせて使用することができます。
  • 上記の例はあくまで一例であり、実際の状況に合わせて変更する必要があります。


INSTALL_NAME_DIR ターゲットプロパティ

INSTALL_NAME_DIR ターゲットプロパティは、CMAKE_INSTALL_NAME_DIR と同様の機能を提供します。ただし、INSTALL_NAME_DIR は CMake 3.10 以降でのみ使用可能である一方、INSTALL_NAME_DIR ターゲットプロパティはすべての CMake バージョンで使用できます。

set(CMAKE_INSTALL_NAME_DIR "@executable_path/../lib")

add_library(MyLibrary SHARED ${SOURCES})

target_properties(MyLibrary INSTALL_NAME_DIR "@executable_path/../lib")

install(TARGETS MyLibrary DESTINATION lib)

CMAKE_RUNTIME_OUTPUT_DIRECTORY と CMAKE_RUNTIME_OUTPUT_PATH

CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_RUNTIME_OUTPUT_PATH は、ターゲットのランタイムパスを制御するために使用されます。これらの変数は、CMAKE_INSTALL_NAME_DIR と異なり、インストールディレクトリを直接設定することはできません。

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "@executable_path/../lib")
set(CMAKE_RUNTIME_OUTPUT_PATH "@executable_path/../lib/MyLibrary")

add_library(MyLibrary SHARED ${SOURCES})

target_link_libraries(MyLibrary OtherLibrary)

install(TARGETS MyLibrary DESTINATION lib)

プラットフォーム固有のオプション

Apple プラットフォームでは、MACOSX_BUNDLE_IDENTIFIERWIN32_EXECUTABLE_NAME などのプラットフォーム固有のオプションを使用して、ターゲットのインストールディレクトリとランタイムパスを制御することができます。

手動設定

最終手段として、install コマンドの DESTINATION オプションを使用して、ターゲットを手動でインストールすることができます。ただし、この方法は柔軟性に欠け、コードの保守性が低下する可能性があります。

方法長所短所適用範囲
CMAKE_INSTALL_NAME_DIRシンプルで使いやすいCMake 3.10 以降でのみ使用可能
INSTALL_NAME_DIR ターゲットプロパティすべての CMake バージョンで使用可能CMAKE_INSTALL_NAME_DIR よりも冗長
CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_RUNTIME_OUTPUT_PATHランタイムパスを直接制御できるインストールディレクトリを直接設定できない
プラットフォーム固有のオプション特定のプラットフォームに最適化されているプラットフォーム固有のコードが必要Apple プラットフォーム
手動設定コードの制御が最も多いコードの保守性が低下する