2009-03-01 12 views
52

Soy un usuario muy frecuente de GNU Autotools (principalmente Autoconf, ocasionalmente Libtool). Estoy trabajando en un proyecto donde la portabilidad va a ser un punto difícil. Sin embargo, el resto del equipo simplemente no se siente cómodo trabajando con m4. Tengo this en mi bandeja de entrada de no uno, sino cuatro personas:Alternativas a Autoconf y Autotools?

m4 is NOT lisp, dammit!

De todos modos, tal vez alguien podría recomendar algo o Python basado en PHP? Estoy trabajando en el extremo C de un árbol mucho más grande; Puedo estar seguro de que Python o PHP   5 estarán presentes, ya que son requisitos previos.

+9

La familiaridad con m4 es irrelevante. Discutir contra el autoconf debido a m4 es como argumentar en contra de C porque el compilador usa un lexer generado por lex y los desarrolladores no entienden el lex. Al usar las herramientas automáticas, puede ignorar por completo m4 el 98% del tiempo. ¡En el 2% restante, también puedes ignorar m4! Por lo general, si te encuentras teniendo problemas relacionados con m4, es porque estás haciendo algo fundamentalmente erróneo. –

+4

@WilliamPursell después de un par de años desde que pregunté esto, tiendo a estar de acuerdo. Pero el problema persiste: es demasiado fácil pasar por una ruta fundamentalmente equivocada al usarlo. Y, cuando quieres configurar realmente el control de compilación granular, finalmente presionas M4. A menos que me haya perdido algo? –

+0

@TimPost Tuve que lidiar con un argumento similar años atrás. Nadie quería aprender M4 (ni nada si pudiera ser ayudado). El proyecto se convirtió en una combinación de scripts de bash y python, además de una espantosa aplicación de C++ que básicamente utilizaba macros de estilo C. Finalmente, después de tener la autoridad para eliminarlo después de 6 meses de que el sistema se volviera arbitrariamente complicado (aplicación C++ que llamaba a python y scripts de shell a través de 'system (2)'), cambié este lío con un script de 200 líneas M4. Nunca aceptaré "no queremos aprenderlo" como una excusa válida. – DevNull

Respuesta

33

He oído cosas buenas sobre CMake que intentan resolver los problemas. Here es el artículo de la wikipedia

+0

Utilizándolo durante mucho tiempo y sin problemas importantes. – Anonymous

+0

Sugeriría lo mismo. Me hice esta pregunta hace un tiempo y llegué a la conclusión de que CMake es la respuesta correcta. – Juliano

+21

Gracias, parece que Cmake hará exactamente lo que necesito.En estos días, si incluso WHISPER 'autoconf' los aldeanos con antorchas y horcas aparecen en mi escritorio: | –

38

He tenido un buen éxito con SCons. Está construido con Python y los scripts de compilación son en realidad scripts de Python, lo que le da una gran cantidad de poder expresivo. Desde el sitio web:

SCons es una herramienta de construcción de software de código abierto, es decir, una herramienta de compilación de próxima generación. Piense en SCons como un sustituto mejorado y multiplataforma para la utilidad clásica Make con funcionalidad integrada similar a autoconf/automake y cachés de compilador como ccache. En resumen, SCons es una forma más fácil, más confiable y más rápida de crear software.

2

He echado un vistazo a CMake, que parece ser una buena alternativa a menos que esté haciendo una compilación cruzada. Si está haciendo una compilación nativa, debería intentarlo

1

Hay una versión python de make creada en Mozilla - pymake - que presumiblemente admite el uso multiplataforma.

+0

Todo lo que PyMake realmente hace es arreglar los errores de GNU en Windows que ahora están arreglados en GNU make de todos modos. – refi64

+0

@ kirbyfan64sos contenta de que el equipo de fabricación de GNU no haya desperdiciado los últimos seis años –

18

Hay un montón de diferentes generadores Makefile alternativa y construir sistemas por ahí:

También disponible, pero no estrictamente dirigido d en C/C++:

  • Premake
  • Ant (para Java)
  • Rake (para Ruby)
  • (Definitivamente más, simplemente no saben a todos ...)

Pero después de enumerar todo esto, las autotools tienen la gran ventaja de no requerir ninguna otra dependencia para el usuario final. Un script de configuración solo se genera una vez por el desarrollador y no requiere nada especial en el extremo del usuario, ya que es un script de shell. Las herramientas enumeradas anteriormente deben instalarse antes de que cualquiera pueda construir su fuente e incluso pueden tener dependencias.

+1

Un script de configuración necesita un shell compatible con sh, que es algo especial en una máquina de Windows. – Caotic

+7

Entonces, ¿cuál es el punto si necesita software adicional de todos modos en Windows? No hay diferencia si instala Python o algún shell. – raimue

+0

Éstos son una gran lista con más detalles en [Wikipedia Build Automation List] (https://en.wikipedia.org/wiki/List_of_build_automation_software) – requinham

1

Para crear software C/C++ de ANT o maven, podría estar interesado en terp. Incluye una tarea portátil del compilador de C++ que funciona con muchos compiladores de C++ en muchas plataformas.

43

Estoy teniendo la oportunidad de ser votado negativamente pero, debo admitir, que desafortunadamente no hay un sustituto real para autotools. CMake, SCons, bjam son agradables pero, cuando se trata de un trabajo serio ... es bastante claro que los autotools son superiores, no porque CMake no pueda hacer lo mismo, sino porque es mucho más difícil hacerlo con él. .

Por ejemplo, CMake, la alternativa más popular a autotools, tiene los siguientes inconvenientes:

  • Sin apoyo de gettext. Esto puede ser un problema real cuando necesita administrar muchas traducciones y códigos fuente traducidos.
  • No admite un destino de desinstalación. Es bastante desagradable descubrir que no puede desinstalar el programa que instaló.
  • Sin compilación automática de ambas bibliotecas compartidas y estáticas.
  • La documentación es muy limitado y malo.

Y así sucesivamente.

Hay muchos otros puntos. Desafortunadamente, no existe un verdadero sustituto de alta calidad para autotools. Por otro lado, si desarrolla en Windows y para Visual Studio, no puede usar autotools y debe elegir CMake que proporcione dichas herramientas.

+3

¡Todo lo que dices es cierto! Si trabajas con Windows/Linux x86/Mac OS X ** SCons ** y ** CMake **, ve más simple que las herramientas automáticas. Pero si vienes a una plataforma inusual obtienes muchos problemas ... – gavenkoa

+14

Las personas a menudo descuidan la razón por la que Autotools está escrito en m4. Está escrito en m4 para que la secuencia de comandos configure se pueda generar en _pure shell_ para que cualquier plataforma UNIX pueda ser dirigida. Por otro lado, CMake apunta a cualquier cosa que tenga CMake. Ahora, ¿qué es más común? CMake o Bourne Shell? Tiendo a decir Bourne Shell. Tampoco son los autores de la falla de Autoconf que Windows se niega a proporcionar una caparazón decente. – alternative

+0

Considero que esta es la mejor respuesta. Estoy trabajando con autotools regularmente y de hecho es dolor a veces. Pero siempre hago las cosas y las autotools estándar proporcionan la configuración resultante y Makefile es excepcionalmente útil. De vez en cuando uso cmake y debo admitir que es mucho más difícil de usar (como en la fuente de creación) y no hay suficientes recursos en línea para hacer las cosas que estoy haciendo con autotools rápidamente. –

13

¿Qué le parece simplemente usar Make y pkg-config?

Aquí está un Makefile template para comenzar.

Menos es más personas.

+2

Esa plantilla Makefile no es compatible con las dependencias automáticas, lo cual es muy bueno. – alternative

+0

para eso es pkg-config? http://hg.suckless.org/surf/file/tip/config.mk#l13 – hendry

+2

No es lo que quise decir. Me refiero a las dependencias internas generadas a partir del código fuente entre los encabezados, como lo hace GCC. No es particularmente difícil de hacer una vez que descubres cómo, pero puede ser un poco molesto. – alternative