21

プログラムをコンパイルできるように実行するためにイメージファイル foo.bmp を必要とする小さなプログラムを作成しています
が、実行するには、foo.bmp を「ビルド」サブディレクトリに手動でコピーする必要があります

プログラムのコンパイル時にサブディレクトリを構築するために foo.bmp を自動的に追加するには、CMakeLists.txt でどのコマンドを使用すればよいですか?

4

2 に答える 2

15

そのためには、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 つから依存関係を追加することもできます。

于 2013-06-10T09:36:33.547 に答える