CMake: Xcodeスキームのワーキングディレクトリを自在に設定 - CMAKE_XCODE_SCHEME_WORKING_DIRECTORY徹底解説


CMAKE_XCODE_SCHEME_WORKING_DIRECTORY は、CMake で生成される Xcode スキーム内の "Run" と "Profile" アクションのワーキングディレクトリを指定するために使用される変数です。 この変数は CMake 3.17 で導入されました。

設定方法

この変数は、ターゲットを作成する際に設定できます。 以下の例をご覧ください。

target_link_libraries(my_target PRIVATE some_library)

target_property(my_target XCODE_SCHEME_WORKING_DIRECTORY "/path/to/working/directory")

この例では、my_target ターゲットの "Run" と "Profile" アクションのワーキングディレクトリが /path/to/working/directory に設定されます。

動作

CMAKE_XCODE_SCHEME_WORKING_DIRECTORY 変数が設定されている場合、CMake は Xcode スキームを生成する際にその値を使用します。 これは、"Run" と "Profile" アクションのワーキングディレクトリプロパティに設定されます。

利点

この変数を使用すると、Xcode でアプリケーションを実行またはプロファイリングする際に、ワーキングディレクトリを簡単に設定できます。 これにより、ユーザーはアプリケーションを実行する前に手動でワーキングディレクトリを変更する必要がなくなります。

注意点

CMAKE_XCODE_SCHEME_WORKING_DIRECTORY 変数は、Xcode 3.17 以降でのみ使用できます。 それ以前のバージョンの CMake を使用している場合は、この変数を使用できません。

以下の例は、CMAKE_XCODE_SCHEME_WORKING_DIRECTORY 変数を使用して、アプリケーションのワーキングディレクトリを /path/to/app/data に設定する方法を示します。

cmake_minimum_required(VERSION 3.17)

project(my_app)

set(SOURCE_FILES main.cpp)
set(CMAKE_RUNTIME_DIRECTORY "/path/to/app/data")

target_link_libraries(my_app PRIVATE some_library)

target_property(my_target XCODE_SCHEME_WORKING_DIRECTORY "/path/to/app/data")

add_executable(my_app ${SOURCE_FILES})


cmake_minimum_required(VERSION 3.17)

project(my_app)

set(SOURCE_FILES main.cpp)
set(CMAKE_RUNTIME_DIRECTORY "/path/to/app/data")

target_link_libraries(my_app PRIVATE some_library)

target_property(my_target XCODE_SCHEME_WORKING_DIRECTORY "/path/to/app/data")

add_executable(my_app ${SOURCE_FILES})

このコードの説明

  1. cmake_minimum_required(VERSION 3.17): CMake の最小バージョンを 3.17 に設定します。
  2. project(my_app): プロジェクトの名前を my_app に設定します。
  3. set(SOURCE_FILES main.cpp): ビルド対象となるソースファイルを main.cpp に設定します。
  4. set(CMAKE_RUNTIME_DIRECTORY "/path/to/app/data"): アプリケーションの実行ディレクトリを /path/to/app/data に設定します。
  5. target_link_libraries(my_app PRIVATE some_library): ターゲット my_app にライブラリ some_library をリンクします。
  6. target_property(my_target XCODE_SCHEME_WORKING_DIRECTORY "/path/to/app/data"): ターゲット my_app の Xcode スキームのワーキングディレクトリを /path/to/app/data に設定します。
  7. add_executable(my_app ${SOURCE_FILES}): main.cpp ファイルを使用して実行可能ファイル my_app を作成します。
  • Xcode スキームの "Run" と "Profile" アクションのワーキングディレクトリは /path/to/app/data に設定されます。
  • CMake は Xcode スキームを生成します。
  • CMake は some_library ライブラリを my_app ターゲットにリンクします。
  • CMake は main.cpp ファイルをビルドします。
  • CMake は my_app という名前のプロジェクトを作成します。
  • 条件付きでワーキングディレクトリを設定するには、if ステートメントを使用できます。
  • 複数のターゲットにワーキングディレクトリを設定するには、各ターゲットに対して target_property コマンドを個別に呼び出します。
  • CMAKE_XCODE_SCHEME_WORKING_DIRECTORY 変数を別のディレクトリに設定するには、そのディレクトリのパスを "/path/to/app/data" に置き換えます。


  • ターゲットごとにしか設定できません。
  • Xcode 3.17 以降でのみ使用できます。

これらの制限を回避するために、以下の代替方法を使用できます。

Xcode プロジェクトファイルを直接編集する

Xcode プロジェクトファイルを直接編集して、"Run" と "Profile" アクションのワーキングディレクトリを設定できます。 これは、以下の手順で行います。

  1. Xcode でプロジェクトを開きます。
  2. ターゲットを選択します。
  3. "ビルド設定" タブを選択します。
  4. "展開" > "展開" を選択して、すべての設定を表示します。
  5. "Run" または "Profile" アクションの "ワーキングディレクトリ" 設定を見つけます。
  6. 希望するワーキングディレクトリのパスを入力します。

CMAKE_RUNTIME_DIRECTORY を使用する

CMAKE_RUNTIME_DIRECTORY 変数は、アプリケーションの実行ディレクトリを設定するために使用できます。 この変数は、CMAKE_XCODE_SCHEME_WORKING_DIRECTORY 変数よりも汎用性が高く、以下の利点があります。

  • ターゲットだけでなく、プロジェクト全体に設定できます。
  • Xcode 3.17 以前のバージョンの CMake で使用できます。

CMAKE_RUNTIME_DIRECTORY を使用してワーキングディレクトリを設定するには、以下の例をご覧ください。

cmake_minimum_required(VERSION 3.10)

project(my_app)

set(SOURCE_FILES main.cpp)
set(CMAKE_RUNTIME_DIRECTORY "/path/to/working/directory")

target_link_libraries(my_app PRIVATE some_library)

add_executable(my_app ${SOURCE_FILES})

この例では、my_app アプリケーションは /path/to/working/directory ディレクトリで実行されます。

カスタム Xcode ビルドステップを作成する

カスタム Xcode ビルドステップを作成して、アプリケーションのワーキングディレクトリを設定できます。 これは、以下の手順で行います。

  1. Xcode でプロジェクトを開きます。
  2. ターゲットを選択します。
  3. "ビルドフェーズ" タブを選択します。
  4. "+" ボタンをクリックして、新しいビルドフェーズを追加します。
  5. "シェルスクリプト" を選択します。
  6. 以下のスクリプトを入力します。
#!/bin/bash

cd "/path/to/working/directory"

./my_app

このスクリプトは、/path/to/working/directory ディレクトリに移動し、my_app アプリケーションを実行します。

どの方法を選択するべきですか?

どの方法を選択するかは、ニーズによって異なります。

  • 高度な制御
    カスタム Xcode ビルドステップを作成する
  • 柔軟性と互換性
    CMAKE_RUNTIME_DIRECTORY を使用する
  • シンプルで簡単な方法
    Xcode プロジェクトファイルを直接編集する
  • ワーキングディレクトリにスペースが含まれている場合は、引用符で囲む必要があります。
  • ワーキングディレクトリを設定する場合は、そのディレクトリが存在し、アプリケーションに必要なアクセス許可があることを確認してください。