¿Alternativas prometedoras para hacer? [cerrado]

83

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?

mike511
fuente
¿No dependerá en gran medida la respuesta del problema? Para las cosas que he intentado hacer con él, makees demasiado simplista.
reinierpost
Ruby Rake, CoffeeScript Cake, Python Scons, Java Ant / Maven, C # MSBuild, CMake multiplataforma
FilBot3
makefile es conciso pero un lenguaje en sí mismo. Me resultó difícil depurarlo. Para los usuarios de Python, hay muchos paquetes que incluyen scons, luigi(adaptado a shouldsee/luck) snakemake,, waf. Hay muchas alternativas de Java, pero este espacio es demasiado pequeño para escribirlas todas.
debería ver
Aún no lo he probado, pero github.com/casey/simplemente suena algo prometedor, "produce mensajes de error detallados y evita las idiosincrasias de make, por lo que depurar un archivo justo es más fácil y menos sorprendente que depurar un archivo make"
Dr. Jan-Philip Gehrcke

Respuestas:

30

echa un vistazo a SCons . Por ejemplo, Doom 3 y Blender lo utilizan.

WaldWolf
fuente
+1 para scons: lo suficientemente similar conceptualmente como para que sea fácil de entender, pero corrige algunas de las cosas más rotas de make (como el manejo de espacios en los nombres).
Tom
5
SCons es solo Python 2, y después de perder días tratando de usar SCons para compilar una versión Python 3 de un proyecto escrito en Python y C ++, recomendaría a la gente que se mantenga alejada. Simplemente use CMake, se está convirtiendo en estándar para C ++ en este punto. O si desea utilizar un sistema de compilación basado en Python, utilice Meson . Se ejecuta rápido y se está desarrollando activamente, lo que no se puede decir de SCons.
ostrokach
SCons ha admitido Python 3 desde septiembre de 2017 (5 meses después de que se escribió el comentario anterior) y es Python 3 solo desde la versión 4.0 (julio de 2020).
Michael Platings
27

Tengo muchos amigos que confían en CMake para el desarrollo multiplataforma:

http://www.cmake.org/

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.

Todd Gamblin
fuente
9
Tenga en cuenta que CMake todavía solo genera archivos MAKE. Entonces, si el problema con la implementación de GNU Make es que no puede hacer lo que usted desea, entonces CMake probablemente no lo ayudará. O autotools, para el caso.
Tom
15
CMake no solo genera archivos MAKE. CMake puede generar toneladas de diferentes tipos de archivos de compilación dirigidos a toneladas de diferentes compiladores y plataformas. Personalmente, odio CMake porque la sintaxis de configuración es absolutamente desagradable.
Taywee
19

doit es una herramienta de Python. Se basa en los conceptos de herramientas de construcción pero es más genérico.

  • puede definir cómo está actualizada una tarea / regla (no solo verificar las marcas de tiempo, los archivos de destino no son necesarios)
  • las dependencias se pueden calcular dinámicamente mediante otras tareas
  • las acciones de la tarea pueden ser funciones de Python o comandos de shell
schettino72
fuente
1
gracias esta respuesta, parece una herramienta increíble
Bedros
16

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.

Eric Talevich
fuente
14

Recomiendo usar Rake . Es la herramienta más fácil que he encontrado.

Sin embargo, otras buenas herramientas que he usado, si Ruby no es lo tuyo, son:

  • AAP (Python)
  • SCons (Python)
  • Ant (Java, configuración en XML, bastante complejo)
Clinton Dreisbach
fuente
7

Tenga en cuenta la ninjaherramienta de compilación (v1.8.2 de septiembre de 2017) que está influenciada por tupy redo.

El generador de archivos de compilación cmake(por ejemplo, para Makefiles de Unix, Visual Studio, XCode, Eclipse CDT, ...) también puede generar ninjaarchivos de compilación desde la versión 2.8.8 (abril de 2012) y, afaik, ninjaahora es incluso la herramienta de compilación predeterminada utilizada por cmake.

Se supone que supera a la makeherramienta (mejor seguimiento de dependencias y también paralelizado).

cmakees 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.

Hotschke
fuente
3
En particular, tupdepende de fuseque 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. redono se ha actualizado en dos años. Lo recomiendo ninja.
mxcl
5

Escribí una herramienta llamada sake que trató de hacer que escribir cosas similares a archivos make sea muy fácil de leer y escribir.

tonyfischetti
fuente
Interesante; pero, ¿podría darnos un poco de información sobre por qué cree que el sake es más fácil de "leer y escribir"? No deberíamos tener que instalar el proyecto para ver que responde a la pregunta.
Dour High Arch
¡Por supuesto! Me pareció que parte de la razón por la que el autor de la pregunta original estaba preocupado por la implementación de Make "complicando demasiado el problema" se debía a la sintaxis oscura de los archivos MAKE. Sake usa archivos que están escritos en YAML y, por lo que obtengo de la entrada de otras personas, son mucho más simples de leer y escribir.
tonyfischetti
El hecho de que utilice la sintaxis YAML debería ser parte de la respuesta, quizás con alguna elaboración sobre cómo YAML contrasta con la makesintaxis.
Aaron Novstrup
Solo usé Sake para un script de compilación y es increíble. ¡Gracias por escribirlo!
nooblar
El sake es asombrosamente simple.
Dan
4

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.

Daniel Spiewak
fuente
2

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.

davetron5000
fuente
2

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

Allan Wind
fuente
Yo también prefiero Make; es un estándar de pantano, disponible en todas partes, y existe una posibilidad razonable de que alguien nuevo en el proyecto lo haya usado antes (o al menos una mejor oportunidad que cualquier otra cosa). Pero. Tengo una base de código grande (varios miles de archivos fuente de C ++) que está escrito para Visual C ++ y que estoy tratando de construir bajo GCC en Linux. Make parecía la opción obvia para una herramienta de compilación, y hemos escrito un convertidor rápido y sucio que analiza archivos vcxproj y produce Makefiles. Todo fue genial, hasta que lo probamos en un proyecto con un espacio en el nombre. ¿Que se supone que hagamos?
Tom
Para que conste, terminé con SCons. Dado que nuestro convertidor se escribió en Python de todos modos, fue bastante fácil convertirlo en un SConscript.
Tom
@Tom, ¿dónde podemos obtener una copia del analizador de archivos vcxproj? Yo también estoy trabajando en un pequeño proyecto en Windows y me gustaría migrar a ubuntu.
Dan
@Maverick: mis disculpas, era propietario y ya no trabajo allí. Me temo que recrearlo no es trivial para sistemas de construcción complejos; Si bien el archivo del espacio de trabajo VS es "solo XML" y averiguar qué archivos de origen crear y qué opciones aplicar no es demasiado complicado, debe tener en cuenta las configuraciones de compilación (depuración, lanzamiento) y también que la solución y los proyectos individuales pueden también importa otros archivos msbuild arbitrarios. Otra opción que consideramos fue usar msbuild para apuntar a GCC, y ahora puede que le resulte más fácil ya que msbuild ha madurado mucho desde entonces.
Tom
1

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.

bu11d0zer
fuente
0

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

Rob Wells
fuente
No es posible una respuesta simple a una pregunta compleja. Sería útil prestar más atención a la pregunta.
Rob Wells