Я хотел бы начать проект C++ на GitHub, чтобы я мог клонировать/строить на разных операционных системах (например, OSX и unix). Будет множество зависимостей, которые необходимо установить (например, curl, libxml2 и т. Д.), И, насколько это возможно, я бы хотел, чтобы пользователь не потребовал вручную устанавливать депиляции в системе. Можно ли сделать это?Как настроить проект C++ на github так, чтобы он был переносимым?
ответ
Это зависит от того, сколько вы хотите откусить.
Короткий ответ - пусть CMake выполнит работу. Он будет генерировать проекты для любой платформы, и они должны использоваться. Вам не нужно , чтобы распространять бинарные файлы для этого, предполагая, что они легко доступны вам (и им, по расширению).
Вот пример, который устанавливает sqlite, boost и eigen, которые я использовал для одного из моих проектов.
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
)
Вы должны принять это и создать проекты визуальной студии, make-файлы и т. Д. Затем создайте проект, как обычно.
CMake поддерживает множество библиотек из коробки, хотя иногда вам приходится использовать Google для менее популярных и добавлять их в свой проект.
Я использую его для повседневной работы, даже если мне не нужна перекрестная платформа.
Когда я действительно хочу распространять двоичные файлы, я обычно настраиваю внешнюю папку с двоичными файлами.
Вот пример:
https://github.com/tomisarobot/curl_race
Это отлично работает, если у вас нет много внешних зависимостей, и если они не огромны. Если это не так, я бы рекомендовал поместить каждую пластину в разные репозитории. Ваш источник должен быть в своем собственном. Вы можете использовать подпроекты, если хотите, хотя это не обязательно. Внешние депо не часто меняются, поэтому его не всегда стоит накладных расходов. Обычно я просто пишу сценарий bash, чтобы документировать, где все получить. Этот скрипт обычно необходим для сборки дистрибутива.
Такие вещи, как maven-nar-plugin, существуют, хотя я не знаю его зрелости. Если вы просто создаете все двоичные файлы для распространения вместе с вашим источником, возможно, это не так привлекательно. Я не вижу много разговоров об этом, поэтому я предполагаю, что принятие является низким. Увидев, что делает maven для Java, он должен быть более популярен.
Немногие мысли
1) Инструменты
Когда это возможно, включают в себя источники инструмента в хранилище, чтобы можно было построить их как в первый раз только шаг
When невозможно определить, какая минимальная версия какого инструмента требуется, чтобы пользователь мог самостоятельно установить их.
- Возможно проверить, если требования зависимостей удовлетворены запустив скрипт
2) Язык
Compile со строгим соблюдением языка. Например,
g++ -std=c++11 -pedantic
- 1. Как настроить log4net так, чтобы он работал на службе wcf?
- 2. Как сделать проект CodeIgniter переносимым с переадресацией
- 3. Как настроить TeamCity CI так, чтобы он распаковывал компоненты Xamarin?
- 4. Как настроить/расширить bind9, чтобы он был географическим?
- 5. Как настроить GitHub так, чтобы все проблемы были автоматически назначены?
- 6. Как настроить log4net так, чтобы он не регистрировал некоторые атрибуты?
- 7. Как назвать DataTriggered UserControl так, чтобы он был виден?
- 8. Как настроить log4net так, чтобы log.IsDebugEnabled был истинным?
- 9. Как настроить проект Eclipse для загрузки изображения так, чтобы он также запускался из командной строки
- 10. Как настроить этот Android-проект от Github?
- 11. Как настроить изображение наведите курсор так, чтобы он всегда был полноэкранным?
- 12. Как настроить TinyMCE так, чтобы он не отображал BB-код?
- 13. Как настроить файл resx так, чтобы он был доступен пользователю приложения
- 14. Как настроить проект htmlHelpers так, чтобы он создавал две dlls - для mvc3 и mvc4?
- 15. Как настроить Spinner так, чтобы он открывался Top?
- 16. Хеш упорядочен так, как он был создан
- 17. Проект уже на GitHub
- 18. CMake как настроить этот проект на C++?
- 19. Как читать Word Doc на C#, чтобы он отображался так, как будто он был открыт в Notepad
- 20. Как защитить проект на github
- 21. Как создать проект Github на двух профилях?
- 22. Можно ли украсить метод на C# так, чтобы он был скомпилирован только в версиях отладки?
- 23. Как скомпилирован проект github и организован в основном проект C на Github
- 24. Как включить исходный код OpenCV в проект C++, чтобы сделать его переносимым?
- 25. Как настроить lager на проект эликсира
- 26. Как получить $ HOME в MinGW, чтобы он не был/c
- 27. Как упаковать расширение Python C так, чтобы он был подмодулем нормального модуля Python?
- 28. Добавить EXE-файл в проект, чтобы он был скопирован в папку Bin/Debug, как DLL?
- 29. Как настроить datatable так, чтобы он упорядочивал (записывал) записи на основе created_date?
- 30. Как настроить проект, разработанный C# 3.5 на Windows 64 бит?
CMake должен это сделать. – JosephH
Как вы автоматически устанавливаете зависимости от Windows? – gongzhitaao