2013-09-06 4 views
5

외부 프로젝트의 종속성을 관리하는 방법이 궁금합니다.CMake : 외부 프로젝트의 종속성

  1. 코어 : 유용한 물건을 많이 수출 라이브러리의 내가 세 가지 프로젝트, 다른 저장소에 하나 하나 있다고 가정 해 봅시다.
  2. Lib1 : 일부 특정 클래스 (코어에 따라 다름)가있는 라이브러리입니다.
  3. 실행는 : LIB1에서 코어도에서 물건을 사용합니다.

각 프로젝트의 CMakeLists.txt. find_package를 사용하고 CMake에 경로를 정의하는 것은 내가 문제없이 각각의 프로젝트를 구축하고 설치할 수 있습니다 지금은 가능한 한 쉽게이 과정을 만들려고 노력하고있어


(나는 라이브러리 파일을 .cmake 구축 this tuto를 따라) 및 나는 ExternalProject_Add 매크로를 도입하고있어, 사람들은있을 것이다이 방법은 실행 저장소를 복제하고 CMake 파일의 도움으로 LIB1코어 또한, 다운로드 컴파일 및 링크됩니다.

문제는 실행LIB1코어에 달려 있다는 것입니다하지만 난 한 번만 복제 (컴파일)되어야합니다.

  • 에서 실행 CMake 클론과 ExternalProject_Add 기능이 코어를 구축 : 여기에 문제가 있습니다.
  • 그런 Cmake 클론 LIB1코어을 찾아하지만 코어 targets.cmake 파일 ( 사용할 수 코어 config.cmake)이 없도록 있도록 이미 설치되지 않은 ... 그리고 코어가의 종속성으로 포함될 때 건물이 프로젝트 트리의 이런 종류의 작업을 할 수있는 문서화 된 방법 또는 내가 해결의 어떤 종류를 작성해야하는 경우

모르겠어요 ... 실패 외부 전문가 core-targets.cmake 파일의 사용을 피하기 위해 ject.

감사합니다.


솔루션

나는 이미 부양을 컴파일하는 데 필요한 모든 파일이, ExternalProject_Add를 사용할 때 빌드 및 설치 폴더에, 그래서 프로젝트를 설치, 다운로드 것을 깨달았다.

  • * ExternalProject_Add * 인수
  • 로 코어 설치 _ 통과 코어
  • * ExternalProject_Add * 에 대한 LIB1에 대한 :

    그래서 나는 (또한 빌드 순서에 대한) 다음 단계를 수행하여이 문제를 관리 할 수 ​​있습니다

  • ... 및 실행 파일.
+0

내가 볼 수있는 두 가지 대안 : (1) 모든 libs 및 실행 파일에 대해 단일 CMake 프로젝트를 작성하십시오. (2)'Executable'은'Lib1'에만 의존합니다. –

+0

(솔루션으로 복사) ExternalProject_Add를 사용할 때 install-folder에서 프로젝트를 다운로드, 빌드 및 설치하므로, 해당 종속 항목을 컴파일하는 데 필요한 모든 파일이 이미 있다는 것을 깨달았습니다. 그래서 나는 (또한 빌드 순서에 대한) 다음 단계를 수행하여이 문제를 관리 할 수 ​​있습니다 는 * ExternalProject_Add가 핵심 에 대한 * ExternalProject_Add LIB1 통과 코어에 대한 인수로 디렉토리 설치합니다. * 및 실행 파일. (질문에 복사) – jgsogo

답변

1

나는 하위 폴더에 포함 된 것입니다 실행, 두 편의 프로젝트를 추가하고 ExternalProject_Add의 사용을 만들 것입니다. 실행 구축하거나 빌드 폴더에 포함 된 바이너리로 직접 작업하기 전에 모든 설치됩니다 있도록

add_subdirectory(CoreWrapper) # Use ExternalProject_Add here add_subdirectory(Lib1Wrapper) # Use ExternalProject_Add here 

이제, 실행에 종속성을 추가 할 수 있습니다.