2013-09-06 45 views
5

Tôi tự hỏi làm thế nào để quản lý các phụ thuộc của một dự án bên ngoài. Hãy nói rằng tôi có ba dự án, mỗi người trong một kho lưu trữ khác nhau:CMake: Phụ thuộc của một dự án bên ngoài

  1. Lõi: thư viện xuất khẩu rất nhiều thứ hữu ích.
  2. Lib1: thư viện với một số lớp cụ thể (tùy thuộc vào Core).
  3. Executable: sử dụng công cụ từ Lõi và cũng từ Lib1.

Mỗi dự án có CMakeLists.txt của nó. Sử dụng find_package và xác định đường dẫn trên CMake tôi có thể xây dựng từng dự án mà không vấn đề và cài đặt nó (Tôi theo this tuto để xây dựng .cmake file cho các thư viện)


Bây giờ tôi đang cố gắng để làm cho quá trình này dễ dàng như có thể và Tôi đang giới thiệu macro ExternalProject_Add, cách này mọi người sẽ chỉ phải sao chép kho lưu trữ thực thi và với sự trợ giúp của các tệp CMake Lib1Core cũng được tải xuống, biên dịch và liên kết.

Vấn đề là ExecutableLib1 phụ thuộc vào Lõi nhưng tôi muốn nó được nhân bản vô tính (và biên soạn) chỉ một lần. Đây là vấn đề:

  • Trong Executable nhái CMake và xây dựng Lõi với các tính năng ExternalProject_Add.
  • Sau đó cmake nhái Lib1 và tìm kiếm Lõi nhưng nó đã không được đã được cài đặt như vậy không có lõi-targets.cmake file (lõi-config.cmake có sẵn) ... và xây dựng không ...

tôi không biết nếu có một cách ghi nhận để làm việc với loại cây dự án hoặc tôi sẽ viết một số loại workaround khi lõi được bao gồm như sự phụ thuộc của một chuyên gia bên ngoài để tránh sử dụng tệp core-targets.cmake.

Cảm ơn!


Giải pháp

tôi nhận ra rằng khi sử dụng ExternalProject_Add nó tải về, xây dựng và INSTALL dự án như vậy, trong thư mục cài đặt, tôi đã có tất cả các file cần thiết để biên dịch phụ thuộc của nó.

Vì vậy, tôi có thể quản lý vấn đề này theo các bước sau (cũng cho xây dựng theo thứ tự):

  • * ExternalProject_Add * cho Lõi
  • * ExternalProject_Add * cho Lib1 đi qua lõi install_dir như là đối số
  • ... và Thực thi.
+0

Hai lựa chọn thay thế tôi thấy: (1) tạo một dự án CMake duy nhất cho tất cả các libs và thực thi của bạn; (2) làm cho 'Executable' chỉ phụ thuộc vào' Lib1'. –

+0

(sao chép dưới dạng giải pháp) Tôi nhận ra rằng khi sử dụng ExternalProject_Add nó tải xuống, xây dựng và CÀI ĐẶT dự án, trong thư mục cài đặt, tôi đã có tất cả các tệp cần thiết để biên dịch người phụ thuộc của nó. Vì vậy, tôi có thể quản lý vấn đề này theo các bước sau (cũng cho thứ tự xây dựng): * ExternalProject_Add cho Core * ExternalProject_Add cho Lib1 đi qua Thư mục cài đặt lõi làm đối số. * ..và thực thi. (được sao chép trong câu hỏi) – jgsogo

Trả lời

1

tôi sẽ thêm hai dự án thuận tiện để thực thi , mà sẽ được chứa trong thư mục con và tận dụng ExternalProject_Add.

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

Bây giờ bạn có thể thêm phụ thuộc vào Executable, do đó tất cả mọi thứ được cài đặt trước Executable là xây dựng hoặc bạn làm việc trực tiếp với các tập tin nhị phân chứa trong việc xây dựng các thư mục.

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