¿Cuáles son las diferencias entre Autotools, Cmake y Scons?
¿Cuáles son las diferencias entre Autotools, Cmake y Scons?
Respuestas:
En verdad, la única "gracia salvadora" real de Autotools es que es lo que todos los proyectos de GNU están usando en gran medida.
Problemas con Autotools:
Funciona ... la mayor parte del tiempo ... es todo lo que puedes decir sobre Autotools. Es un sistema que resuelve varios problemas que solo conciernen realmente al proyecto GNU ... para su código de cadena de herramientas base y central. (Editar (24/05/2014): Cabe señalar que este tipo de preocupación es algo potencialmente MAL por el que preocuparse: Heartbleed se deriva parcialmente de este pensamiento y con sistemas correctos y modernos, realmenteno tiene ningún negocio que se ocupe de gran parte de lo que corrige Autotools. GNU probablemente necesita hacer una eliminación cruda de la base de código, a la luz de lo que sucedió con Heartbleed). Puede usarlo para hacer su proyecto y podría funcionar bien para un proyecto pequeño que no espera que funcione en ningún otro lugar, excepto Linux o donde la cadena de herramientas GNU claramente funciona correctamente. La expresión de que "se integra muy bien con Linux" es bastante la declaración audaz y bastante incorrecta . Se integra con el conjunto de herramientas GNU razonablemente bien y resuelve los problemas que TI tiene con sus objetivos.
Esto no quiere decir que no haya problemas con las otras opciones discutidas en el hilo aquí.
SCons es más un reemplazo para Make / GMake / etc. y se ve muy bien, considerando todas las cosas Sin embargo ...
Los ejemplos dados para CMake en este hilo son un poco falsos.
Sin embargo...
En verdad, tus objetivos deberían dictar lo que eliges aquí.
Hay una razón por la que muchos, muchos proyectos están abandonando qmake, Autotools, etc. y se están moviendo a CMake. Hasta ahora, puedo esperar limpiamente que un proyecto basado en CMake caiga en una situación de compilación cruzada o en una configuración de VisualStudio o solo necesite una pequeña cantidad de limpieza porque el proyecto no tuvo en cuenta solo las partes de Windows o OSX a la base de código. Realmente no puedo esperar que de un proyecto basado en SCons, y espero que 1/3 o más proyectos de Autotools se hayan equivocado ALGO que impide que se desarrolle correctamente en cualquier contexto, excepto el host que construye uno o Scratchbox2.
Debe hacerse una distinción importante entre quién usa las herramientas. Cmake es una herramienta que debe ser utilizada por el usuario al construir el software. Las herramientas automáticas se usan para generar un tarball de distribución que se puede usar para construir el software usando solo las herramientas estándar disponibles en cualquier sistema compatible con SuS. En otras palabras, si está instalando software desde un tarball que se creó utilizando las herramientas automáticas, no está utilizando las herramientas automáticas . Por otro lado, si está instalando software que usa Cmake, entonces está usando Cmake y debe tenerlo instalado para construir el software.
La gran mayoría de los usuarios no necesitan tener las herramientas automáticas instaladas en su caja. Históricamente, se ha causado mucha confusión porque muchos desarrolladores distribuyen tarballs malformados que obligan al usuario a ejecutar autoconf para regenerar el script de configuración, y esto es un error de empaquetado. Más confusión ha sido causada por el hecho de que la mayoría de las principales distribuciones de Linux instalan múltiples versiones de las herramientas automáticas, cuando no deberían instalar ninguna de ellas por defecto. Aún más confusión es causada por los desarrolladores que intentan usar un sistema de control de versiones (por ejemplo, cvs, git, svn) para distribuir su software en lugar de construir tarballs.
asciidoc
o help2man
o doxygen
, lo que es más importante, la combinación correcta de herramientas automáticas. Este ha sido un gran problema de marketing para las herramientas automáticas. Los usuarios piensan erróneamente que necesitan instalar autoconf porque no entienden la diferencia entre el tarball y el VCS.
No se trata de estándares de codificación GNU.
Los beneficios actuales de las herramientas automáticas, específicamente cuando se usan con automake, es que se integran muy bien con la construcción de la distribución de Linux.
Con cmake, por ejemplo, siempre es "¿fue -DCMAKE_CFLAGS o -DCMAKE_C_FLAGS lo que necesito?" No, no es ninguno, es "-DCMAKE_C_FLAGS_RELEASE". O -DCMAKE_C_FLAGS_DEBUG. Es confuso: en autoconf, es solo ./configure CFLAGS = "- O0 -ggdb3" y lo tiene.
En integración con las infraestructuras de compilación, scons tiene el problema que no puede usar make %{?_smp_mflags}
, _smp_mflags
en este caso es una macro RPM que se expande aproximadamente a (el administrador puede configurarlo) la potencia del sistema. La gente pone cosas como -jNCPUS aquí a través de su entorno. Con scons que no funciona, entonces los paquetes que usan scons solo pueden ser seriamente integrados en distribuciones.
./configure CFLAGS=-O0
menudo falla con los paquetes que sobrescriben CFLAGS en el archivo MAKE y requieren en su lugar que el usuario se ejecute ./configure --enable-debug
. (por ejemplo tmux
)
Lo que es importante saber sobre los Autotools es que no son un sistema de construcción general: implementan los estándares de codificación GNU y nada más. Si desea hacer un paquete que siga todos los estándares GNU, entonces Autotools es una excelente herramienta para el trabajo. Si no lo hace, entonces debe usar Scons o CMake. (Por ejemplo, vea esta pregunta ). Este malentendido común es de donde proviene la mayor parte de la frustración con Autotools.
AUTOMAKE_OPTIONS = -foreign
su Makefile.am
. (O -foreign
en tu autogen.sh
. Creo que casi todos usan esto.)
installcheck
y distclean
. Si intentas cambiar ese tipo de comportamiento mientras sigues usando Autotools, entonces estás perdiendo el tiempo.
Si bien desde el punto de vista de los desarrolladores, cmake es actualmente el más fácil de usar, desde la perspectiva del usuario, las herramientas automáticas tienen una gran ventaja
Las herramientas automáticas generan un solo script de configuración de archivo y todos los archivos para generarlo se envían con la distribución. Es fácil de entender y solucionar con la ayuda de grep / sed / awk / vi. Compare esto con Cmake, donde se encuentran muchos archivos en / usr / share / cmak * / Módulos, que el usuario no puede solucionar a menos que tenga acceso de administrador.
Por lo tanto, si algo no funciona del todo, por lo general se puede "arreglar" fácilmente mediante el uso de herramientas estándar de Unix (grep / sed / awk / vi, etc.) en forma de mazo sin tener que comprender el sistema de compilación.
¿Alguna vez ha cavado a través de su directorio de compilación de cmake para descubrir qué está mal? En comparación con el simple shellscript que se puede leer de arriba a abajo, seguir los archivos generados de Cmake para descubrir lo que está sucediendo es bastante difícil. Además, con CMake, la adaptación de los archivos FindFoo.cmake requiere no solo el conocimiento del lenguaje CMake, sino que también puede requerir privilegios de superusuario.