Tổ chức thư mục của kho lưu trữ CMake (C ++) có chứa một số dự án


12

Tôi muốn một số lời khuyên về việc tổ chức một tập hợp các dự án C ++ độc lập nhưng có liên quan được lưu trữ trong một kho lưu trữ (git) duy nhất. Các dự án sử dụng CMake.

Ví dụ đơn giản, chúng tôi tưởng tượng 2 dự án A và B, A phụ thuộc vào B. Hầu hết mọi người phát triển A sẽ nhận B thông qua hệ thống đóng gói. Do đó, họ sẽ chỉ biên dịch A. Tuy nhiên, chúng ta nên cho phép các nhà phát triển tự biên dịch cả A và B (và cài đặt nó), riêng rẽ hoặc cùng nhau.

Đây là một đề xuất:

└── 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) Xác định các biến cmake chung cho tất cả các dự án (nếu có) và bao gồm các thư mục con. (2) Xác định chính dự án và các biến cmake cần thiết của dự án. (3) Xác định các tiêu đề để cài đặt và các tiêu đề cần thiết để biên dịch. (4) Định cấu hình thư viện và tệp nhị phân. (5) Định cấu hình thực thi kiểm tra và trường hợp kiểm thử.

Theo tôi hiểu, mỗi dự án nên tạo một tệp XXXConfig.cmake và cài đặt nó trong / usr / local / share / cmake. Viết các tệp này có vẻ khá phức tạp khi đọc tài liệu của CMake.

Bạn nghĩ sao ? Liệu cấu trúc có ý nghĩa?

Bạn có tình cờ có một ví dụ làm việc của một tập hợp các dự án như vậy không?


Tôi nghĩ rằng bạn có thể quá mức ở đây - chúng tôi vừa giới thiệu cmake cho một ứng dụng với một dự án thư viện người phụ thuộc và cho đến nay vẫn hài lòng với một CMakeLists.txttệp cho mỗi dự án: A/CMakeLists.txt(ứng dụng) bao gồm B/CMakeLists.txt(thư viện) sử dụng add_subdirectory(...).
ssc

Câu trả lời:


12

Sau khi đọc và kiểm tra khá nhiều, tôi đã thực hiện một dự án C ++ demo cơ bản thể hiện việc sử dụng CMake, CTest + boost.test, CPack và Doxygen và sử dụng ít nhiều tổ chức mà tôi đã đề cập trong câu hỏi của mình.

Dự án cho thấy cách tạo ra các phụ thuộc của tiểu dự án, cách biên dịch toàn bộ repo hoặc chỉ một tiểu dự án, cách đóng gói, cách kiểm tra và cách sản xuất tài liệu.

Xem tại đây: https://github.com/Barthelemy/CppProjectTemplate

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.