CMake로 만든 후 디렉토리의 내용을 빌드 디렉토리에 복사하는 방법은 무엇입니까?


81

config소스 파일 옆 의 디렉토리에 일부 구성 파일 (xml, ini, ...)이 있습니다. 프로젝트를 만들 때마다 config 디렉터리의 모든 파일을 실행 파일 옆의 빌드 디렉터리에 복사하려면 어떻게해야합니까?

답변:


146

사용할 수 있습니다 add_custom_command.

목표가라고 말하면 MyTarget다음과 같이 할 수 있습니다.

add_custom_command(TARGET MyTarget PRE_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                       ${CMAKE_SOURCE_DIR}/config/ $<TARGET_FILE_DIR:MyTarget>)

이것은 MyTarget"/ config"의 내용 을 빌드 하고 대상 exe / lib가 끝날 디렉토리에 복사 할 때마다 실행됩니다 .

으로 마크 Lakata는 대체 아래 댓글에서 지적 PRE_BUILDPOST_BUILDadd_custom_command빌드가 성공하면 복사 만 일어날 것을 보장한다.

설명

  • ${CMAKE_COMMAND} CMake의 경로입니다.
  • -E CMake가 빌드하는 대신 명령을 실행하게합니다.
  • copy_directoryA는 명령 줄 도구
  • config 콘텐츠가 빌드 대상에 복사 될 디렉토리 (프로젝트의 루트 아래에 있음)입니다.
  • $<TARGET_FILE_DIR:MyTarget>A는 생성 식 에 설명, add_custom_command문서.

1
CMakeLists.txt에있는 실제 대상 중 하나-즉 add_executable또는을 통해 추가 된 항목 add_library입니다.
Fraser

1
예- 변경되지 않은 것을 감지하면 make실행조차하지 않을만큼 영리 하다고 생각 make MyTarget합니다. 대상에서 변경 사항이 있으면 해당 대상에서 make가 실행되고 파일이 복사됩니다.
Fraser

7
POST_BUILD는 아마도 더 나은 옵션 일 것입니다. 즉, 빌드가 성공한 경우에만 파일이 복사됩니다.
Mark Lakata 2015

6
make clean프로젝트가 정리 될 때 복사 된 파일을 삭제해야한다는 것을 알 수있는 방법이 있습니까?
moonwalker

3
내용 대신 디렉토리 자체를 복사하는 방법이 있습니까?

12

상위 답변 외에도

내용 대신 디렉토리 자체를 복사하려면 /${FOLDER_NAME}두 번째 매개 변수 끝에 추가 할 수 있습니다 .

이렇게 :

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_directory
                       ${CMAKE_SOURCE_DIR}/config $<TARGET_FILE_DIR:${PROJECT_NAME}>/config)


-5

내 프로젝트에서 INSTALL을 사용하여 CMake에 지정하고 conf 파일로 바이너리를 어디로 이동합니다. cmake 실행 후 "make install"을 사용하십시오.


OP는 빌드 완료시이를 수행하는 방법을 물었습니다. 함축 된 의미는 쉘에 다른 명령을 입력하지 않은 것입니다. 빌드를 수행하고 (가) 바이너리 필요가 마술이있다 파일. 나도 install()명령을 사용 하지만 이것은 코드가 빌드되고 단위 테스트를 통과하며 다른 사람들이 어느 정도 사용할 준비가 된 특수한 경우입니다. 나는 그것을 디버그하기 위해 설치하지 않습니다.
PfunnyGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.