ソース ツリーからバイナリ ツリーにディレクトリをコピーしています。例: www を bin フォルダーにコピーする方法。
work
├─bin
└─src
├─doing
│ └─www
├─include
└─lib
ありがとう。
バージョン 2.8 以降、file コマンドには copy 引数があります。
file(COPY yourDir DESTINATION yourDestination)
ご了承ください:
相対入力パスは現在のソース ディレクトリに対して評価され、相対パスは現在のビルド ディレクトリに対して評価されます。
誰もcmake -E copy_directory
カスタムターゲットとして言及していないので、私が使用したものは次のとおりです。
add_custom_target(copy-runtime-files ALL
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/runtime-files-dir ${CMAKE_BINARY_DIR}/runtime-files-dir
DEPENDS ${MY_TARGET})
このconfigure
コマンドは、cmake
が実行されたときにのみファイルをコピーします。もう1つのオプションは、新しいターゲットを作成し、custom_commandオプションを使用することです。これが私が使用しているものです(複数回実行する場合は、add_custom_target
呼び出しごとに一意になるように行を変更する必要があります)。
macro(copy_files GLOBPAT DESTINATION)
file(GLOB COPY_FILES
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
${GLOBPAT})
add_custom_target(copy ALL
COMMENT "Copying files: ${GLOBPAT}")
foreach(FILENAME ${COPY_FILES})
set(SRC "${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}")
set(DST "${DESTINATION}/${FILENAME}")
add_custom_command(
TARGET copy
COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DST}
)
endforeach(FILENAME)
endmacro(copy_files)
execute_process を使用して cmake -E を呼び出します。ディープ コピーが必要な場合は、copy_directory
コマンドを使用できます。さらに良いことsymlink
に、create_symlink コマンドを使用して (プラットフォームがサポートしている場合) を作成できます。後者は次のように実現できます。
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/path/to/www
${CMAKE_BINARY_DIR}/path/to/www)
から: http://www.cmake.org/pipermail/cmake/2009-March/028299.html
感謝!これは、add_custom_target と add_custom_command の束を使用するための非常に役立つアドバイスです。プロジェクトのどこでも使用できるように、次の関数を作成しました。インストール規則も指定します。主にインターフェイス ヘッダー ファイルをエクスポートするために使用します。
#
# export file: copy it to the build tree on every build invocation and add rule for installation
#
function (cm_export_file FILE DEST)
if (NOT TARGET export-files)
add_custom_target(export-files ALL COMMENT "Exporting files into build tree")
endif (NOT TARGET export-files)
get_filename_component(FILENAME "${FILE}" NAME)
add_custom_command(TARGET export-files COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}" "${CMAKE_CURRENT_BINARY_DIR}/${DEST}/${FILENAME}")
install(FILES "${FILE}" DESTINATION "${DEST}")
endfunction (cm_export_file)
使用法は次のようになります。
cm_export_file("API/someHeader0.hpp" "include/API/")
cm_export_file("API/someHeader1.hpp" "include/API/")