2012-10-31 2 views
1

CMake를 처음 사용했습니다. 나는 프로젝트를 컴파일하고있다. 나는이CMake copy_if_different를 재귀 적으로 사용하여 파일 복사

프로젝트와 같은 구조를 가지고이 폴더에 대한

  • SRC

    1. 테스트
      통화 당 (모든 소스 파일)과 CMakeLists.txt (정적 라이브러리를 생성)
    2. 예제
      .cpp (모든 원본 파일) 및이 폴더의 CMakeLists.txt (정적 라이브러리 만들기)
    1. 테스트
      .H (모든 헤더 파일)
    2. 예를
      .H (모든 헤더 파일)
  • 빌드를 포함

    1. C MakeLists.txt (메인 CMakelist 파일)
  • LIB

    1. 테스트
    2. 예 (포함 생성 된 파일)

질문 (생성 된 파일이 포함되어 있습니다) 즉 모든 정적 파일을 복사하는 방법입니다. 테스트 폴더와 예제 폴더에서 이진 구조 외부의 다른 폴더에 재귀 적으로 배치 하시겠습니까?

내 주요 CMakeLists.txt 파일 :

PROJECT(copythefiles) 

SET(CMAKE_CURRENT_BINARY_DIR ".") 

add_subdirectory(/src/test /lib/test) # I am specifying the location where the files are to be generated 
add_subdirectory(/src/example /lib/example) 

ADD_CUSTOM_TARGET(a ALL COMMAND ${CMAKE_COMMAND} -E echo "\{X}" > ${CMAKE_CURRENT_BINARY_DIR}/lib/test/libtest.a) 

ADD_CUSTOM_COMMAND(TARGET a POST_BUILD 
    COMMAND ${CMAKE_COMMAND} -E copy_if_different 
     ${CMAKE_CURRENT_BINARY_DIR}/lib/test/libtest.a 
     ${CMAKE_CURRENT_BINARY_DIR}/lib/libtest.a) 

이 파일을 복사합니다. 그러나 나는 약 20 개의 프로젝트를 가지고 있으며 재귀 적으로하고 싶습니다.

감사합니다 :)

답변

2

그것은 프로젝트의 루트에 최상위 CMakeLists.txt 파일이 정상입니다. "/ build"에서 CMakeLists.txt를 루트로 옮기면 각각의 경우에 바이너리 경로를 지정할 필요없이 add_subdirectory을 호출 할 수 있어야합니다.

당신이 CMakeLists 파일을 이동 가정하면, 당신은 add_subdirectory 호출하기 전에이 작업을 삽입 할 수 있습니다

function(MoveLib TheTarget) 
    add_custom_command(TARGET ${TheTarget} POST_BUILD 
        COMMAND ${CMAKE_COMMAND} -E 
         copy $<TARGET_FILE:${TheTarget}> ${CMAKE_SOURCE_DIR}/lib) 
endfunction() 

execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_SOURCE_DIR}/lib) 

를이 다음 예를 들어, 추가 할 수 있습니다 라이브러리의 CMakeLists.txt 파일 내에 MoveLib(my_test)이 있습니다. 여기서 my_test은 관련 라이브러리의 이름입니다.


모든 라이브러리의 복사본은 "/ lib"로 끝납니다. 실제로 사본을 원하지 않는다면 ARCHIVE_OUTPUT_DIRECTORY 속성을 살펴 봐야합니다. 단순히 추가하면

모든 정적 라이브러리는 "/ lib"로 끝납니다. 여기 몇 가지 볼거리가 있습니다.

공유 라이브러리는 ARCHIVE_OUTPUT_DIRECTORY에 포함되지 않습니다. 공유 라이브러리에 대한 세부 사항은 ARCHIVE_OUTPUT_DIRECTORY에 대한 문서에 있습니다.

또한 일부 생성자 (예 : MSVC)는 지정된 디렉토리에 구성 별 하위 디렉토리를 추가하므로 "/ lib/Debug", "/ lib/Release"등으로 끝납니다. ${CMAKE_SOURCE_DIR}/lib 모든 점에 CMAKE_ARCHIVE_OUTPUT_DIRECTORY의 구성 - 특정 버전을 설정하여 :

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR}/lib) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR}/lib) 
+0

당신은 내가이 문제를 해결하는 데 도움이 바랍니다 수 있습니다. http://stackoverflow.com/questions/13729478/missing-source-and-include-folder-when-integrating-cmake-with-eclipse/13731123#13731123 – Pintu

관련 문제