2016-05-11 22 views
10

Tôi đang cố gắng tạo một dự án C++ nguồn mở. Tôi muốn nó dễ dàng để xây dựng nhất có thể, nhưng đồng thời là nền tảng chéo. Tôi không cần thư viện gui hoặc nặng như tăng hoặc Qt, vì vậy tôi đã quyết định sử dụng GitHub, CMake và LibSourcey. Vấn đề của tôi là, tôi không thể tìm cách để làm cho dự án của tôi dễ dàng xây dựng trong các cửa sổ, đó là môi trường phát triển của tôi. Làm cách nào để "cài đặt" thư viện trong Windows để sử dụng trong dự án của tôi? Tôi thậm chí phải cài đặt nó trong cửa sổ? Có thể tải xuống, tạo và liên kết tự động không?CMake "cài đặt" hoặc bao gồm thư viện trong các cửa sổ

Trên cửa sổ, bên cạnh trình cài đặt, tôi cũng muốn tạo phiên bản di động, vì vậy không muốn bất kỳ đường dẫn thư viện mã hóa cứng nào.

Tôi giả sử, trên một số nền tảng, như Linux, thư viện được xây dựng riêng biệt và được đóng gói bởi người bảo trì. Vì vậy, tôi không nên chỉ gói các bản sao của riêng mình.

Vì vậy, câu hỏi của tôi là: Làm cách nào để thiết lập dự án là nền tảng chéo và dễ xây dựng và thực tiễn tốt nhất là gì?

+0

Tôi không chắc chắn nếu bạn đang nói về việc tìm kiếm một giải pháp cho quá trình phát triển của bạn hoặc để phát hành hoặc cả hai? [msys2] (https://sourceforge.net/projects/msys2/) có thể được sử dụng trong các cửa sổ để quản lý các gói yêu cầu của bạn. –

+0

Tôi gặp vấn đề tương tự gần đây, msys2 trông tuyệt vời, nhưng tôi thích sử dụng toolchain nguyên bản cho các cửa sổ phát triển. –

+0

Tôi nhìn vào msys, nhưng tôi muốn nó có nguồn gốc. Với msys nó thậm chí còn khó hơn để biên dịch cho x64 và với sự hỗ trợ unicode thích hợp. – denisps

Trả lời

1

Bạn có thể tạo git submodule trong repo git của bạn với đường dẫn ví dụ contrib/LibSourcery và url để github repo của LibSourcery, vì LibSourcery sử dụng cmake bạn chỉ cần thêm dòng đó vào bạn CMakeLists.txt: add_subdirectory(contrib/LibSourcery)

Vì vậy người muốn sử dụng mã của bạn, chỉ cần sử dụng mã git clone --recursive url để nhận tất cả mã và phụ thuộc của bạn, sau khi chạy cmake -G, để tạo dự án cho IDE lựa chọn của mình (bao gồm cả MSVC++), dự án mở trong IDE và nhấn nút xây dựng, đó là tất cả.

+0

Nó dường như không hoạt động. Tôi không biết nếu tôi đang làm điều gì đó sai hoặc LibSourcery không hỗ trợ loại bao gồm. Tôi đã bao gồm nó trong thư mục contrib như submodule, nhưng tôi vẫn không chắc chắn nếu đó là đúng cách để bao gồm một thư viện trên nền tảng Unix. Nó có liên kết đến thư viện đã cài đặt nếu nó có sẵn không? Làm thế nào để nó thêm bao gồm? – denisps

+0

@denisps cmake cũng hỗ trợ các dự án bên ngoài theo cách như vậy https://cmake.org/cmake/help/v3.0/module/ExternalProject.html – fghj

+0

Câu trả lời này có vẻ là gần nhất. Thật không may, LibSourcery dường như bị hỏng và có khả năng bị bỏ rơi. Tôi sẽ đánh giá cao nếu bạn giải thích về cách tính đến trường hợp khi tôi liên kết với thư viện đã được cài đặt trên, ví dụ, Linux. – denisps

1

Sử dụng babun. Đó là một wrapper cho Cygwin và nó hoạt động hoàn hảo cho tất cả mọi thứ tôi cần, thậm chí biên dịch với cmake.

Hoặc, bạn có thể sử dụng premake, sử dụng lua làm hệ thống cấu hình và hoạt động tốt trên cửa sổ.

0

Không có cách thức nền tảng trang nhã, vì ý tưởng "cài đặt" không tồn tại trên Windows, do đó việc sử dụng cài đặt cmake không được xác định ở đó. Đối với một cái gì đó được cho là để giúp cross-nền tảng, tôi cảm thấy đây là một thiếu w cmake.

Giải pháp của tôi là viết một _INSTALL tùy chỉnh lấy cùng một arg như cmake install và sau đó trên Linux, nó chỉ cần cài đặt, và trên Windows nó thực hiện lệnh add_command, bản sao sau xây dựng cho đường dẫn cài đặt. giống nhau cả thôi. Về cơ bản, _INSTALL hoạt động theo cách bạn mong đợi một lệnh cài đặt đa nền tảng để hoạt động. Có thể chia sẻ _INSTALL func của tôi nếu có sự quan tâm.

_INSTALL được đặt vào một Helper.cmake, và bao gồm trong tất cả CMakeList.txt cho dự án của tôi, vì vậy tất cả những gì tôi cần làm là gọi nó và các tệp lib/inc được tạo ra kỳ diệu xuất hiện cho cả win và linux.

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