2013-04-06 25 views
10

Tôi muốn bắt đầu một dự án C++ trên GitHub để tôi có thể sao chép/xây dựng trên các hệ điều hành khác nhau (ví dụ, OSX và Unix). Sẽ có rất nhiều phụ thuộc cần phải được cài đặt (ví dụ curl, libxml2, vv), và nhiều nhất có thể tôi muốn tránh việc người dùng cần phải tự cài đặt các dep trên hệ thống. có khả năng làm cái này không?Tôi nên thiết lập một dự án C++ trên github để nó có thể di chuyển như thế nào?

+2

CMake nên làm điều đó. – JosephH

+0

Bạn sẽ tự động cài đặt các phụ thuộc trên Windows như thế nào? – gongzhitaao

Trả lời

3

Tùy thuộc vào số tiền bạn muốn cắn.

Câu trả lời ngắn gọn là để CMake thực hiện công việc. Nó sẽ tạo ra các dự án cho bất kỳ nền tảng nào và chúng có thể sử dụng được. Bạn không cần cần để phân phối tệp nhị phân cho điều này, giả sử chúng có sẵn cho bạn (và cho chúng, theo phần mở rộng).

Dưới đây là ví dụ thiết lập sqlite, boost và eigen mà tôi đã sử dụng cho một trong các dự án của mình.

cmake_minimum_required(VERSION 2.8) 
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) 

# boost 
find_package(Boost 1.42.0 REQUIRED) 
include_directories(${Boost_INCLUDE_DIRS}) 
link_directories(${Boost_LIBRARY_DIRS}) 

find_package(Eigen REQUIRED) 
include_directories(${EIGEN_INCLUDE_DIRS}) 

find_package(Sqlite3 REQUIRED) 
include_directories(${SQLITE3_INCLUDE_DIR}) 

set(CMAKE_CXX_FLAGS "-std=c++0x") 

include_directories(.) 

link_libraries(
    ${Boost_LIBRARIES} 
    ${SQLITE3_LIBRARIES} 
) 

add_executable(igd_sqlite 
    main.cpp 
) 

Bạn sẽ thực hiện việc này và tạo dự án studio trực quan, makefiles, v.v. Sau đó, hãy tạo dự án như bình thường.

CMake hỗ trợ nhiều thư viện ngoài hộp, mặc dù đôi khi bạn phải google cho những thư viện ít phổ biến hơn và thêm chúng vào dự án của bạn.

Tôi sử dụng nó cho công việc hàng ngày của mình, ngay cả khi tôi không cần nền tảng chéo.

Khi tôi thực sự muốn phân phối các tệp nhị phân, tôi thường thiết lập một thư mục bên ngoài với các tệp nhị phân.

Dưới đây là một ví dụ:

https://github.com/tomisarobot/curl_race

này hoạt động tuyệt vời nếu bạn không có nhiều phụ thuộc bên ngoài và nếu họ không phải là rất lớn. Khi đó không phải là trường hợp, sau đó tôi muốn khuyên bạn nên đặt mỗi plattform trong kho khác nhau. Nguồn của bạn cũng phải là của riêng nó. Bạn có thể sử dụng các dự án con nếu bạn muốn, mặc dù điều đó là không cần thiết. Bên ngoài deps không thay đổi thường xuyên, do đó, nó không phải luôn luôn có giá trị trên không. Thông thường tôi chỉ viết một kịch bản bash để ghi lại nơi lấy mọi thứ. Tập lệnh này thường là cần thiết cho một bản phân phối.

Những thứ như maven-nar-plugin tồn tại, mặc dù tôi không biết về sự trưởng thành của nó. Nếu bạn chỉ đang tạo tất cả các tệp nhị phân để phân phối với nguồn của mình, thì có lẽ nó không phải là hấp dẫn. Tôi không thấy nhiều chuyện nói về nó, vì vậy tôi cho rằng việc nhận con nuôi thấp. Đã thấy những gì maven làm cho Java, nó sẽ phổ biến hơn.

1

Vài suy nghĩ

1) Công cụ

  • Khi có thể, bao gồm các nguồn công cụ trong kho để người ta có thể xây dựng chúng như là một lần đầu chỉ bước

  • Khi không thể, hãy chỉ định rõ phiên bản tối thiểu của công cụ nào là bắt buộc để người dùng có thể tự cài đặt chúng

    • Có thể kiểm tra xem các yêu cầu phụ thuộc được thỏa mãn bằng cách chạy một kịch bản

2) Ngôn ngữ

Compile với việc tuân thủ ngôn ngữ nghiêm ngặt. Ví dụ:

g++ -std=c++11 -pedantic 
+1

cũng: việc sử dụng các thư viện, mà các cuộc gọi hệ thống trừu tượng cụ thể vào một giao diện thống nhất (đối với tất cả các hệ thống) có thể hữu ích. – scones

+0

+1: vâng, tuyệt đối. – Arun

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