2013-07-05 5 views
5

CMake 런타임 (file(COPY ...), configure_file(...)add_custom_command() 모두 작동) *에서 파일 및 디렉토리를 복사하는 방법에는 여러 가지가 있지만, 소스에서 빌드 디렉토리로 복사 된 파일 또는 디렉토리가 CPack에 의해 생성 된 아카이브에 나타납니다. 실제로 다음이 연결 설치를해야합니다 대상에 복사 링크로 그 this SO answer는, 그것을 해결하는 것입니다 비록 :파일을 복사하여 CPack 보관함에 넣으십시오

install(TARGET mytarget DESTINATION bin) 

나는 file()configure_file() 명령은 명백한가없는 것을 인식 않은 반면, 목표에 추가 할 수있는 방법. 그러나 이것은 효과가 없었습니다. 그래서, 아래와 같은 간단한 CMakeLists.txt가 주어지면, 모든 파일 (exmaple 디렉토리 포함)을 아카이브에 표시하려면 어떻게해야합니까?! 나는 아직이 3 가지 방법 중 하나가 실제로 어떤 발견되지 않은 *

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
enable_language(FORTRAN) 
add_executable(mytarget ${PROJECT_SOURCE_DIR}/myprog.for) 
install(TARGETS mytarget DESTINATION bin) 

add_custom_command(TARGET mytarget PREBUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_directory 
        ${PROJECT_SOURCE_DIR}/examplefiles ${PROJECT_BINARY_DIR}/examplefiles) 

set(CPACK_GENERATOR "TGZ") 
include(CPack) 

(대부분?) 정확한은 - 그래서 상당히

+0

바이너리 배포판보다는 * 소스 패키지 *에서 어떻게 작동합니까? CPack 소스 패키지 생성기는 구성 가능성면에서 다소 제한적인 것으로 보입니다. – kynan

답변

7

로를 이해할 수있을 것이다 너무 여기에 대한 조언은의 documentation 설명 CPack 모듈에 의해 만들어진 바이너리 설치 프로그램에는 CMake의 INSTALL 명령을 통해 설치된 모든 것이 들어 있습니다. 따라서 install 명령을 사용하여 bin 폴더에 복사하기 때문에 예제의 실행 파일 mytarget이 CPack 아카이브에 포함됩니다. 또한 CPack을 가지고

생성 된 아카이브의 example 폴더를 포함, 다음과 같은 방법으로 install commandDIRECTORY 변형을 사용할 수 있습니다

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example") 

file(COPY ...)configure_file(...)가 무엇인지에 영향이없는 CPack에 의해 설치되었습니다. 두 명령은 보통 CMake 프로젝트를 구성 할 때 원본 트리에서 이진 트리로 파일을 복사하는 데 사용됩니다.

add_custom_command${CMAKE_COMMAND} -E copy_directory ...과 함께 사용하면 실제 파일 복사가 프로젝트 빌드 시간으로 연기됩니다. 그러나 CPack 아카이브에 복사 된 파일을 포함시키지 않습니다.

+0

'install (DIRECTORY ...'완벽하게 감사했습니다. – ChrisW

관련 문제