2009-09-22 39 views
26

Tôi có hai dự án, cả hai đều sử dụng CMake. Bây giờ tôi muốn bao gồm một trong các dự án như một thư viện bên trong thư viện khác, trong khi vẫn duy trì khả năng biên dịch chúng như là các dự án độc lập.Nhúng một dự án cmake vào trong một dự án khác?

Điều tôi đã làm cho đến thời điểm này là: Sử dụng hệ thống kiểm soát phiên bản để sao chép một bản sao của dự án con trong một thư mục con của dự án mẹ. Tôi đã sử dụng "add_subdirectory" để bao gồm CMakeLists.txt của dự án con vào dự án cha mẹ. Và tôi đã cố định va chạm tên giữa các mục tiêu bằng cách đổi tên một số mục tiêu trong dự án con.

Tuy nhiên, một vấn đề mà tôi đang gặp phải là các thử nghiệm cấu hình khác nhau trong dự án con dường như không chạy. Ví dụ, dự án con sử dụng mô-đun FindThreads để xác định nguyên tắc đồng bộ hóa nào có sẵn. Dự án cha mẹ không biết về vấn đề luồng và do đó không có bất kỳ thử nghiệm nào liên quan đến vấn đề này. Tương tự, dự án con có nhiều bài kiểm tra khác nhau cho các tiêu đề và như vậy không cần thiết cho dự án cha mẹ. Không có thử nghiệm nào trong số này xuất hiện để chạy và các ký hiệu được xác định bởi các kiểm tra này không được thêm vào tệp CMakeCache.txt.

Tôi thực sự không muốn phải hoist tất cả các bài kiểm tra của dự án con (mà chủ yếu là đối phó với các vấn đề nền tảng cụ thể không liên quan đến phụ huynh) vào CMakeLists.txt của dự án mẹ.

Trả lời

17

CMake 2.8 đã thêm một mô-đun External Project mới, cho phép bạn tạo mục tiêu tùy chỉnh để thúc đẩy xây dựng một dự án CMake khác. Các tài liệu về điều này là loại yếu, nhưng có vẻ như nó có thể làm những gì bạn muốn.

Tôi nghĩ ý tưởng là gọi ExternalProject_Add từ dự án mẹ, trỏ nó vào thư mục nguồn của dự án con (bạn thậm chí có thể kiểm tra dự án con của SVN hoặc CVS ​​cho bạn, tốt đẹp!).

+1

Xin cảm ơn, tôi đã làm việc với các dự án bên ngoài gần đây và họ làm những gì tôi muốn. Vì tôi đang sử dụng các tiểu dự án git, tôi phải yêu cầu ExternalProject_Add không tải xuống hoặc cài đặt dự án bên ngoài - điều này có thể được thực hiện bằng cách đặt lệnh tải xuống và cài đặt thành "" (chuỗi trống). – Talin

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