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?
Trả lời
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.
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. Tôi nên bắt đầu như thế nào để giúp các dự án trong Github?
- 2. Làm cách nào tôi có thể thiết lập leiningen để làm việc với nhiều dự án?
- 3. Tôi nên thiết lập các dự án/giải pháp của Visual Studio trong kho lưu trữ Mercurial như thế nào?
- 4. Tôi nên cấu trúc các dự án phức tạp như thế nào trong C?
- 5. Có thể 'gắn thẻ' các dự án trên github không?
- 6. Những dự án tôi nên cho phép di cư
- 7. Làm thế nào để thiết lập tài liệu "trang đầu" trên PYPI cho một dự án?
- 8. Tôi nên tiếp cận dữ liệu di chuyển từ thiết kế cơ sở dữ liệu "xấu" đến thiết kế có thể sử dụng như thế nào?
- 9. Tôi nên chạy di chuyển alembic trên Heroku như thế nào?
- 10. thế nào tôi có thể listview tự động kích thước để nó không di chuyển
- 11. Làm cách nào tôi có thể phản chiếu dự án được lưu trữ trên bệ phóng trên github?
- 12. Làm thế nào tôi có thể tham khảo một dự án từ một dự án khác trong C#?
- 13. Tôi nên kiểm soát phiên bản C# dự án nào?
- 14. thiết lập trang demo trên github
- 15. làm thế nào tôi có thể thiết lập jdk trong intellij 9 trên mac
- 16. Tôi nên giữ các dự án ngã ba trên github trong bao lâu?
- 17. Làm thế nào để thiết lập OpenNI 2.0 với OpenCV cho một dự án Kinect?
- 18. AnkhSVN: di chuyển một dự án sang một repo khác
- 19. Làm thế nào để tạo một System.Configuration.Install.Installer để nhận một biến từ dự án Thiết lập?
- 20. Môi trường QA nên được thiết lập như thế nào?
- 21. Tải dự án của tôi lên github
- 22. Làm thế nào để thiết lập một dự án ruby cơ bản?
- 23. Tôi nên di chuyển hoặc xóa tệp trong Trình tạo Yeoman như thế nào?
- 24. Tôi nên chuyển một int vào stringWithFormat như thế nào?
- 25. Dự án thiết lập mạng: Cách chuyển nhiều trường CustomActionData
- 26. Làm thế nào tôi có thể biên dịch mã CUDA sau đó liên kết nó với một dự án C++?
- 27. Di chuyển một dự án đến Maven Central
- 28. Tôi nên tạo các lớp học trong dự án ATL như thế nào?
- 29. Làm cách nào để thiết lập dự án thử nghiệm cho dự án plugin Eclipse
- 30. Làm thế nào để thiết lập nhiều thư mục nguồn trong một dự án Eclipse?
CMake nên làm điều đó. – JosephH
Bạn sẽ tự động cài đặt các phụ thuộc trên Windows như thế nào? – gongzhitaao