소스 트리에서 바이너리 트리로 디렉토리를 복사하는 방법은 무엇입니까?
소스 트리에서 바이너리 트리로 디렉토리를 복사합니다. 예 : www를 bin 폴더에 복사하는 방법.
work
├─bin
└─src
├─doing
│ └─www
├─include
└─lib
감사.
CMake 2.8에서는 file(COPY ...)
명령을 사용하십시오 .
이전 CMake 버전에서이 매크로는 한 디렉터리에서 다른 디렉터리로 파일을 복사합니다. 복사 된 파일에서 변수를 대체하지 않으려면 configure_file @ONLY 인수를 변경하십시오.
# Copy files from source directory to destination directory, substituting any
# variables. Create destination directory if it does not exist.
macro(configure_files srcDir destDir)
message(STATUS "Configuring directory ${destDir}")
make_directory(${destDir})
file(GLOB templateFiles RELATIVE ${srcDir} ${srcDir}/*)
foreach(templateFile ${templateFiles})
set(srcTemplatePath ${srcDir}/${templateFile})
if(NOT IS_DIRECTORY ${srcTemplatePath})
message(STATUS "Configuring file ${templateFile}")
configure_file(
${srcTemplatePath}
${destDir}/${templateFile}
@ONLY)
endif(NOT IS_DIRECTORY ${srcTemplatePath})
endforeach(templateFile)
endmacro(configure_files)
버전 2.8부터 파일 명령 에는 복사 인수가 있습니다.
file(COPY yourDir DESTINATION yourDestination)
참고 :
상대 입력 경로는 현재 소스 디렉토리를 기준으로 평가되고 상대 대상은 현재 빌드 디렉토리를 기준으로 평가됩니다.
이 configure
명령 cmake
은 실행될 때만 파일을 복사합니다 . 또 다른 옵션은 새 대상을 만들고 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)
아무도 cmake -E copy_directory
사용자 지정 대상으로 언급하지 않았으므로 다음은 내가 사용한 것입니다.
add_custom_target(copy-runtime-files ALL
COMMAND cmake -E copy_directory ${CMAKE_SOURCE_DIR}/runtime-files-dir ${CMAKE_BINARY_DIR}/runtime-files-dir
DEPENDS ${MY_TARGET})
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
Thank! That is really helpful advice to use bunch of add_custom_target and add_custom_command. I wrote the following function to use everywhere in my projects. Is also specifies the installation rule. I use it primarily to export interface header files.
#
# 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)
Usage looks like this:
cm_export_file("API/someHeader0.hpp" "include/API/")
cm_export_file("API/someHeader1.hpp" "include/API/")
Based on the answer from Seth Johnson, that's what I wrote for more convenience.
# Always define the target
add_custom_target(copy_resources ALL COMMENT "Copying resources…")
# Copy single files
macro(add_files_to_environment files)
add_custom_command(TARGET copy_resources POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${ARGV} ${CMAKE_CURRENT_BINARY_DIR})
endmacro()
# Copy full directories
macro(add_directory_to_environment distant local_name)
file(GLOB_RECURSE DistantFiles
RELATIVE ${distant}
${distant}/*)
foreach(Filename ${DistantFiles})
set(SRC "${distant}/${Filename}")
set(DST "${CURRENT_BUILD_DIR}/${local_name}/${Filename}")
add_custom_command(TARGET copy_resources POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DST})
message(STATUS "file ${Filename}")
endforeach(Filename)
endmacro()
EDIT : That doesn't really work as expected. This one works flawlessly.
# Copy single files
macro(resource_files files)
foreach(file ${files})
message(STATUS "Copying resource ${file}")
file(COPY ${file} DESTINATION ${Work_Directory})
endforeach()
endmacro()
# Copy full directories
macro(resource_dirs dirs)
foreach(dir ${dirs})
# Replace / at the end of the path (copy dir content VS copy dir)
string(REGEX REPLACE "/+$" "" dirclean "${dir}")
message(STATUS "Copying resource ${dirclean}")
file(COPY ${dirclean} DESTINATION ${Work_Directory})
endforeach()
endmacro()
참고URL : https://stackoverflow.com/questions/697560/how-to-copy-directory-from-source-tree-to-binary-tree
'IT박스' 카테고리의 다른 글
WordPress : 사용자 지정 게시물 유형에서 "새로 추가"비활성화 (0) | 2020.12.06 |
---|---|
IE에서 링크 주변의 테두리를 제거하는 방법은 무엇입니까? (0) | 2020.12.06 |
UITableView, 다시로드 할 때 아래로 스크롤 하시겠습니까? (0) | 2020.12.06 |
자바 스크립트에서 n 문자마다 문자를 삽입하려면 어떻게해야합니까? (0) | 2020.12.06 |
Android에서 드로어 블의 이미지를 동적으로 설정하는 방법은 무엇입니까? (0) | 2020.12.06 |