2016-07-29 18 views
8

Tôi đang làm việc trong một công ty mà họ xây dựng một dự án tách biệt trong các thành phần được phát triển riêng biệt bởi các nhóm phát triển khác nhau. Tất cả mọi thứ trong C++.Quản lý gói cho C++

Chúng sử dụng rất nhiều thư viện chung và quản lý tất cả chúng, chúng tạo ra một công cụ để liên kết bằng cách nào đó phiên bản của dự án và phiên bản của thư viện.

Câu hỏi đặt ra là về sự tồn tại của một số công cụ trên thị trường mà đã thực hiện điều này:

Ý tôi là, Nếu tôi đi đến công cụ này, tôi có thể tải về ví dụ như phiên bản 4.0 của dự án của chúng tôi có chính xác phiên bản 4.5 của thư viện 1 và 3.4 của thư viện 2. Nếu tôi nhấp vào "Tải xuống", tôi sẽ Tải xuống mã nguồn (hoặc nhị phân) của dự án toàn bộ dự án (dự án + thư viện) này và phiên bản cụ thể của từng thư viện. Ví dụ: nếu tôi muốn Tải xuống một dự án khác của một nhà phát triển khác trong công ty, sử dụng cùng một thư viện trong các phiên bản hoặc nền tảng khác nhau, tôi chỉ phải chọn và tải xuống dự án 2 với thư viện 1 phiên bản 5.0 và thư viện 2 2,5, v.v.

Có trên thị trường bất kỳ công cụ nào giúp tôi tạo ra một số mối quan hệ như vậy và btw, kết nối với mã repo (gitlab trong trường hợp của chúng tôi) không?

Tôi đã chọn Gradle, Conan, ... nhưng chúng xây dựng, không quản lý "quan hệ" giữa các thành phần.

Something như thế:

enter image description here

+0

Bạn đã kiểm tra build2 chưa? – Dutow

+0

Trình quản lý gói Linux đã thực hiện tất cả điều này. Họ sẽ tự động phân tích các phụ thuộc thư viện chia sẻ của mỗi tệp thi hành; và giả định rằng các thư viện chia sẻ phụ thuộc được phiên bản chính xác, chúng sẽ thực thi các phụ thuộc vào lúc cài đặt. Câu trả lời ngắn: chuyển đổi các ứng dụng của bạn sang Linux. Nếu họ đã có trên Linux, sửa chữa các phiên bản thư viện được chia sẻ của bạn (chúng phải bị hỏng, sau đó) và cho phép người quản lý gói của Linux thực hiện công việc của họ. –

+0

Mọi thứ được thực hiện trong Windows, với VS2010 và trình biên dịch trực quan. Không có tùy chọn để thay đổi các công cụ và nền tảng để phát triển. Đáng buồn thay, điều này là không thể vì chúng tôi cũng sử dụng các công cụ khác để biên dịch cho các hệ thống thời gian thực sau này. –

Trả lời

5

CMake cung cấp đủ chức năng để tạo ra các loại mối quan hệ trong hệ thống xây dựng của bạn. Thật không may, bạn phải sử dụng CMake để quản lý các bản dựng cho tất cả các dự án của bạn để nó hoạt động tốt. CMake nhắm tới Visual Studio cũng như GCC, Clang và ICC. Nếu bạn thích đọc sách này.

  1. Sử dụng CMake để tạo cấu hình xây dựng cho các dự án phụ thuộc của bạn.
  2. Sử dụng ExternalProject lệnh để thể hiện sự phụ thuộc của các dự án mẹ.
    • ExternalProject hỗ trợ Git cũng như Tải xuống bằng Mecurial, CSV, SVN và trực tiếp.
    • Bạn có thể chỉ định cam kết, thẻ hoặc chi nhánh chính xác trong Git.
    • Hỗ trợ xác thực Git qua SSL hoặc HTTP cơ bản.
  3. Chạy CMake dựa vào dự án mẹ. Tất cả các phụ thuộc được tải xuống và biên dịch tự động.

Ví dụ phụ thuộc

ExternalProject_Add(
    Library1 
    GIT_REPOSITORY https://[email protected]/repo/library_1.git 
    GIT_TAG tag_S.33.91 
    HTTP_USERNAME ciserv 
    HTTP_PASSWORD [email protected]3M3 
    CMAKE_ARGS 
     -DBUILD_EXAMPLES:BOOL=OFF 
     -DBUILD_TESTS:BOOL=OFF 
     -DBUILD_DOCS:BOOL=OFF 
) 
target_link_libraries(MyTarget PRIVATE Library1) 

Có một số lệnh khác trong module ExternalProject có thể được sử dụng để tùy chỉnh thêm các phụ thuộc nếu cần thiết.

3

Để theo dõi câu trả lời của @ norman-b-lancaster, hãy cân nhắc xem xét Hunter package manager. Nó dựa trên tính năng ExternalProject của CMake và tập trung nhiều vào các bản dựng có thể tái tạo.Mỗi bản phát hành của Hunter cung cấp kịch bản lệnh CMake cần thiết để khóa các phiên bản gói của tất cả các phụ thuộc.

Câu hỏi của bạn cho thấy rằng bạn quan tâm đến quản lý gói trong công ty của bạn (trái với các gói công khai hiện có từ ví dụ: GitHub). Những người bảo trì của Hunter nhận thức được this issue và dường như mở để hỗ trợ nó nếu nhu cầu có mặt.

0

cget cung cấp cách cài đặt phụ thuộc chỉ bằng cách trỏ tới tarball nguồn, dịch vụ lưu trữ như github và gitlab cung cấp. Bạn cũng có thể cung cấp requirements.txt để cài đặt tất cả các phụ thuộc quá mức.

Nó dựa trên cmake, nó sẽ cài đặt với rất ít thay đổi, nhưng nó cũng hỗ trợ khác non-cmake packages. Bạn cũng có thể tạo một bản phân phối của recipes để xử lý các gói không tuân theo quy trình làm việc cấu hình, xây dựng và cài đặt chuẩn. Ngoài ra còn có một công thức nấu ăn lof đã có sẵn cho nhiều dự án C++ đã here.

Các vấn đề liên quan