¿Cómo debo configurar un proyecto de C ++ en github para que sea portátil?

Me gustaría iniciar un proyecto de C ++ en GitHub de manera que pueda clonar / build en diferentes sistemas operativos (por ejemplo, OSX y Unix). Habrá muchas dependencies que deben instalarse (por ejemplo, curl, libxml2, etc.) y, en la medida de lo posible, me gustaría evitar que el usuario tenga que instalar las deps manualmente en el sistema. ¿Es posible hacer esto?

Depende de cuánto quieras morder.

La respuesta corta es dejar que CMake haga el trabajo. Generará proyectos para cualquier plataforma y deberían ser utilizables. No necesita distribuir binarys para esto, suponiendo que estén disponibles para usted (y para ellos, por extensión).

Aquí hay un ejemplo que configura sqlite, boost y eigen que utilicé para uno de mis proyectos.

cmake_minimum_requinetworking(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 ) 

Tomarías esto y generarías proyectos de estudio visual, makefiles, etc. Luego, crea el proyecto como lo harías normalmente.

CMake admite muchas bibliotecas de forma inmediata, aunque a veces es necesario search en Google las less populares y agregarlas a su proyecto.

Lo uso para mi trabajo diario, incluso cuando no necesito una plataforma cruzada.

Cuando realmente quiero distribuir binarys, generalmente configuro una carpeta externa con los files binarys.

Aquí hay un ejemplo:

https://github.com/tomisarobot/curl_race

Esto funciona muy bien si no tienes muchas dependencies externas y si no son enormes. Cuando ese no es el caso, recomiendo colocar cada plataforma en repositorys diferentes. Tu fuente también debería ser la suya. Puede usar subproyectos si lo desea, aunque eso no es estrictamente necesario. Deps externos no cambian tan a menudo, por lo que no siempre vale la pena la sobrecarga. Por lo general, solo escribo un script bash para documentar dónde get todo. Este script generalmente es necesario para una compilation de distribución de todos modos.

Cosas como el maven-nar-plugin existen, aunque desconozco su madurez. Si solo estás creando todos los binarys para distribuir con tu fuente de todos modos, entonces tal vez no sea tan atractivo. No veo mucho sobre eso, así que supongo que la adopción es baja. Habiendo visto lo que maven hace para Java, debería ser más popular.

Pocos pensamientos

1) Herramientas

  • Cuando sea posible, incluya las fonts de la herramienta en el repository para que pueda comstackrlas como un paso por primera vez.

  • Cuando no sea posible, especifique claramente qué versión mínima de qué herramienta se necesita para que el usuario pueda instalarla ella misma

    • Posiblemente, compruebe si los requisitos de dependencia se cumplen ejecutando un script

2) Idioma

Comstack con estricto cumplimiento del lenguaje. Por ejemplo

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