プログラムをコンパイルできるように実行するためにイメージファイル foo.bmp を必要とする小さなプログラムを作成しています
が、実行するには、foo.bmp を「ビルド」サブディレクトリに手動でコピーする必要があります
プログラムのコンパイル時にサブディレクトリを構築するために foo.bmp を自動的に追加するには、CMakeLists.txt でどのコマンドを使用すればよいですか?
プログラムをコンパイルできるように実行するためにイメージファイル foo.bmp を必要とする小さなプログラムを作成しています
が、実行するには、foo.bmp を「ビルド」サブディレクトリに手動でコピーする必要があります
プログラムのコンパイル時にサブディレクトリを構築するために foo.bmp を自動的に追加するには、CMakeLists.txt でどのコマンドを使用すればよいですか?
そのためには、add_custom_command を使用して、ビルド ディレクトリに必要なファイルのビルド ルールを生成する必要があります。次に、ターゲットからそれらのファイルへの依存関係を追加します。CMake は、ターゲットが必要とする場合にのみ何かをビルドします。
また、ソース ディレクトリからビルドしない場合は、ファイルのみをコピーするようにしてください。
このようなもの:
project(foo)
cmake_minimum_required(VERSION 2.8)
# we don't want to copy if we're building in the source dir
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# list of files for which we add a copy rule
set(data_SHADOW yourimg.png)
foreach(item IN LISTS data_SHADOW)
message(STATUS ${item})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${item}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${item}" "${CMAKE_CURRENT_BINARY_DIR}/${item}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${item}"
)
endforeach()
endif()
# files are only copied if a target depends on them
add_custom_target(data-target ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/yourimg.png")
この場合、コピーを強制するために yourimg.png ファイルに依存する「ALL」カスタム ターゲットを使用していますが、既存のターゲットの 1 つから依存関係を追加することもできます。