He estado usando make y makefiles durante muchos años, y aunque el concepto es sólido, la implementación tiene algo que desear.
¿Alguien ha encontrado buenas alternativas para hacer que no compliquen demasiado el problema?
He estado usando make y makefiles durante muchos años, y aunque el concepto es sólido, la implementación tiene algo que desear.
¿Alguien ha encontrado buenas alternativas para hacer que no compliquen demasiado el problema?
scons
, luigi
(adaptado a shouldsee/luck
) snakemake
,, waf
. Hay muchas alternativas de Java, pero este espacio es demasiado pequeño para escribirlas todas.
Respuestas:
echa un vistazo a SCons . Por ejemplo, Doom 3 y Blender lo utilizan.
Tengo muchos amigos que confían en CMake para el desarrollo multiplataforma:
Es el sistema de compilación utilizado para VTK (entre otras cosas), que es una biblioteca C ++ con enlaces multiplataforma de Python, Tcl y Java. Creo que probablemente sea lo menos complicado que encontrarás con tantas capacidades.
Siempre puedes probar las herramientas automáticas estándar . Los archivos de Automake son bastante fáciles de armar si solo está ejecutando en Unix y si se apega a C / C ++. La integración es más complicada y las herramientas automáticas están lejos de ser el sistema más simple de todos los tiempos.
doit es una herramienta de Python. Se basa en los conceptos de herramientas de construcción pero es más genérico.
Algunos de los proyectos de GNOME se han migrado a waf .
Está basado en Python, como Scons, pero también es independiente, por lo que en lugar de requerir que otros desarrolladores tengan instalada su herramienta de compilación favorita, simplemente copie el script de compilación independiente en su proyecto.
Tenga en cuenta la ninja
herramienta de compilación (v1.8.2 de septiembre de 2017) que está influenciada por tup
y redo
.
El generador de archivos de compilación cmake
(por ejemplo, para Makefiles de Unix, Visual Studio, XCode, Eclipse CDT, ...) también puede generar ninja
archivos de compilación desde la versión 2.8.8 (abril de 2012) y, afaik, ninja
ahora es incluso la herramienta de compilación predeterminada utilizada por cmake
.
Se supone que supera a la make
herramienta (mejor seguimiento de dependencias y también paralelizado).
cmake
es una herramienta ya bien establecida. Siempre puede elegir más tarde la herramienta de compilación sin modificar sus archivos de configuración. Entonces, si se desarrolla una mejor compilación en el futuro, que contará con el apoyo decmake
, puede cambiarla convenientemente.
Tenga en cuenta que para c / c ++, la mejora del tiempo de compilación a veces es limitada debido a los encabezados incluidos a través del preprocesador (en particular cuando se usan libs solo de encabezado, por ejemplo boost & eigen ) que, con suerte, serán reemplazados por la propuesta de módulos (en una revisión técnica de c ++ 11 o eventualmente en c ++ 1y). Consulte esta presentación para obtener detalles sobre este tema.
tup
depende de fuse
que se ejecute la extensión del núcleo de fusibles, lo que, en lo que a mí respecta, sugiere que los mantenedores están locos. redo
no se ha actualizado en dos años. Lo recomiendo ninja
.
Escribí una herramienta llamada sake que trató de hacer que escribir cosas similares a archivos make sea muy fácil de leer y escribir.
make
sintaxis.
Depende de lo que intentes hacer. Si todo lo que desea son dependencias de destino de estilo make e invocación de comandos, entonces Make es en realidad una de las mejores herramientas para la tarea. :-) Rake es muy bueno, pero puede resultar torpe en algunos casos simples. Ant es, por supuesto, una ciudad de verbosidad, pero tiene un mejor soporte para construir lenguajes similares a Java (incluidos Scala y Groovy). Además, Ant está disponible en todas partes. . Esa es la razón principal por la que lo uso. Debido a que funciona de manera consistente en Windows, en realidad es incluso más multiplataforma que Make.
Si desea la administración de dependencias para bibliotecas similares a Java, Maven es la opción canónica, pero personalmente me gusta mucho más Buildr. Es más rápido y mucho más fácil de personalizar (está basado en Rake). Desafortunadamente, todavía no es tan ubicuo como Maven.
El sistema de creación de Ruby se llama rake: http://rake.rubyforge.org/
Parece bastante prometedor.
Siempre está Ant: http://ant.apache.org , que personalmente me parece horrible. Sin embargo, es el estándar de facto para el desarrollo de Java.
Todavía prefiero hacer después de haber considerado varias alternativas. Cuando genera dependencias automáticamente, ya sea a través del compilador o algo como fastdep, no queda mucho por hacer. En particular, no quiero que mi script de construcción esté vinculado al lenguaje de implementación, y no me gusta escribir cosas en XML cuando hay alternativas más legibles disponibles. Sin embargo, una herramienta que exponga un lenguaje de propósito general tiene mérito, pero otro lenguaje interpretado no lo tiene (afaik). ¿Qué hay de malo en Make? podría apelar a su punto de vista sobre alejarse de la marca.
/Alano
FlowTracer de RTDA es otra buena opción que he visto utilizada comercialmente en un entorno a gran escala (decenas de miles de trabajos): http://www.rtda.com/flowtracer-design-flow-infrastructure-software
Tiene una GUI que muestra el gráfico de dependencia con cuadros codificados por colores para trabajos y óvalos para archivos. Cuando la cantidad de trabajos y archivos aumenta, una herramienta basada en GUI como FlowTracer es fundamental.
El costo de instalación inicial es más alto que Make. Hay una curva de aprendizaje para configurar su primer flujo usándolo. Después de eso, se vuelve más rápido.
No estoy seguro de si está haciendo la pregunta correcta aquí.
¿Buscas una marca simplificada? En cuyo caso, necesita que alguien que esté muy familiarizado con make cree una serie de (M | m) akefiles que simplificarán su problema.
¿O quiere ver la tecnología subyacente? ¿Estamos deseando hacer cumplir una arquitectura de tipo diseño por contrato que esté incorporada y aplicada en el diseño del código? ¿O posiblemente, el lenguaje en sí, por ejemplo, Ada y su concepto de especificaciones (interfaces) y cuerpos (implementaciones)?
¿Qué dirección estás buscando afectará definitivamente los resultados potenciales de tal pregunta?
Básicamente, nuevas formas de construir sistemas a partir de solo aquellos componentes que realmente han cambiado versus la adopción de nuevas tecnologías que tienen tales mecanismos incorporados por diseño.
Lo siento, no es una respuesta directa. Solo quería intentar que evaluaras qué camino querías seguir.
salud,
Robar
make
es demasiado simplista.