74

ソース ツリーからバイナリ ツリーにディレクトリをコピーしています。例: www を bin フォルダーにコピーする方法。

work
├─bin
└─src
    ├─doing
    │  └─www
    ├─include
    └─lib

ありがとう。

4

7 に答える 7

140

バージョン 2.8 以降、file コマンドには copy 引数があります。

file(COPY yourDir DESTINATION yourDestination)

ご了承ください:

相対入力パスは現在のソース ディレクトリに対して評価され、相対パスは現在のビルド ディレクトリに対して評価されます。

于 2010-02-01T16:37:34.270 に答える
38

誰も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})
于 2014-12-09T10:50:28.383 に答える
27

この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)
于 2009-06-07T21:11:18.227 に答える
16

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

于 2009-03-31T01:58:47.417 に答える
2

感謝!これは、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/")
于 2010-10-08T08:33:40.637 に答える