여러 프로젝트를 포함하는 CMake (C ++) 저장소의 디렉토리 구성


12

단일 (git) 저장소에 저장된 관련이 있지만 독립적 인 C ++ 프로젝트 세트에 대한 조언을 원합니다. 프로젝트는 CMake를 사용합니다.

간단한 예를 들어 B에 따라 2 개의 프로젝트 A와 B, A가 있다고 가정합니다. A를 개발하는 대부분의 사람들은 패키징 시스템을 통해 B를 얻게됩니다. 따라서 A 만 컴파일합니다. 그러나 개발자가 A와 B를 모두 컴파일 (및 설치) 할 수 있도록해야합니다.

제안은 다음과 같습니다.

└── Repo1
    ├── CMakeLists.txt (1)
    ├── A
       ├── CMakeLists.txt (2)
       ├── include
          ├── aaa.h
          ├── aaaa.h
          └── CMakeLists.txt (3)
       └── src
           ├── aaa.cpp
           ├── aaaa.cpp
           └── CMakeLists.txt (4)
    ├── B
       ├── CMakeLists.txt (2)
       ├── include
          ├── bbb.h
          ├── bbbb.h
          └── CMakeLists.txt (3)
       └── src
           ├── bbb.cpp
           ├── bbbb.cpp
           └── CMakeLists.txt (4)
    └── test
        ├── CMakeLists.txt (5)
        └── testaaaa.cpp

(1) 모든 프로젝트 (있는 경우)에 대한 공통 cmake 변수를 정의하고 하위 디렉토리를 포함합니다. (2) 프로젝트 자체와 프로젝트의 필수 cmake 변수를 정의합니다. (3) 설치할 헤더와 컴파일에 필요한 헤더를 정의합니다. (4) 라이브러리 및 바이너리를 구성합니다. (5) 테스트 실행 파일과 테스트 사례를 구성합니다.

알다시피 각 프로젝트는 XXXConfig.cmake 파일을 생성하여 / usr / local / share / cmake에 설치해야합니다. CMake 문서를 읽을 때 이러한 파일을 작성하는 것은 상당히 복잡해 보입니다.

어떻게 생각해 ? 구조가 의미가 있습니까?

그러한 일련의 프로젝트에 대한 실제 사례가 있습니까?


나는 당신이 여기에서 오버 슈트 할 것이라고 생각합니다. 우리는 방금 하나의 의존 라이브러리 프로젝트로 하나의 응용 프로그램에 대해 cmake를 도입했으며 지금까지 CMakeLists.txt프로젝트 당 하나의 파일에 만족 합니다 : A/CMakeLists.txt(앱) include B/CMakeLists.txt(라이브러리) using add_subdirectory(...).
ssc

답변:


12

약간의 읽기와 테스트를 거친 후 CMake, CTest + boost.test, CPack 및 Doxygen의 사용을 설명하고 필자가 언급 한 조직을 거의 사용하지 않는 기본적인 데모 C ++ 프로젝트를 만들었습니다.

이 프로젝트는 하위 프로젝트 종속성을 만드는 방법, 전체 리포지토리 또는 하위 프로젝트를 컴파일하는 방법, 패키지하는 방법, 테스트 방법 및 문서 작성 방법을 보여줍니다.

여기를 참조하십시오 : https://github.com/Barthelemy/CppProjectTemplate

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.