A veces compilo aplicaciones de la fuente y he estado usando:
./configure
make
sudo make install
Pero recientemente, encontré ./autogen.sh
que genera la configuración y crea scripts para mí y los ejecuta.
¿Qué otros métodos existen para optimizar la compilación C / C ++ / C # (mono)? Hacer parece un poco viejo. ¿Hay nuevas herramientas por ahí? Dada la elección, ¿cuál debo usar?
compiling
programming
Louis Salin
fuente
fuente
autogen.sh
son principalmente scripts personalizados, que generalmente invocanautoreconf
pero también pueden invocar./configure
e inclusomake
. No creo que su comportamiento esté estandarizado de ninguna manera; el objetivo principal es en tener un archivo exetable dentro del proyecto, que la gente puede funcionar (en lugar de tener que saber que necesitan para evocarautoreconf
)Respuestas:
Autoconf y Automake se propusieron para resolver un problema evolutivo de Unix.
A medida que Unix evolucionó en diferentes direcciones, los desarrolladores que querían código portátil tendían a escribir código como este:
A medida que Unix se bifurcaba en diferentes implementaciones (BSD, SystemV, muchos tenedores de proveedores y más tarde Linux y otros sistemas similares a Unix), se volvió importante para los desarrolladores que querían escribir código portátil para escribir código que no dependía de una marca particular de sistema operativo , pero en características expuestas por el sistema operativo. Esto es importante porque una versión de Unix introduciría una nueva característica, por ejemplo, la llamada al sistema "enviar", y luego otros sistemas operativos la adoptarían. En lugar de tener un espagueti de código que buscaba marcas y versiones, los desarrolladores comenzaron a probar las características, por lo que el código se convirtió en:
La mayoría de los archivos README para compilar el código fuente en los 90 apuntaron a los desarrolladores para editar un archivo config.h y comentar que las características adecuadas están disponibles en el sistema, o enviarían archivos config.h estándar para cada configuración del sistema operativo que se haya probado.
Este proceso fue engorroso y propenso a errores, y así es como surgió Autoconf. Debería pensar en Autoconf como un lenguaje compuesto por comandos de shell con macros especiales que pudieron reemplazar el proceso de edición humana de config.h con una herramienta que probó la funcionalidad del sistema operativo.
Por lo general, escribiría su código de prueba en el archivo configure.ac y luego ejecutaría el comando autoconf que compilaría este archivo en el comando de configuración ejecutable que ha visto utilizado.
Entonces, cuando ejecuta
./configure && make
, estaba investigando las características disponibles en su sistema y luego construía el ejecutable con la configuración que se detectó.Cuando los proyectos de código abierto comenzaron a usar sistemas de control de código fuente, tenía sentido registrar el archivo configure.ac, pero no el resultado de la compilación (configure). Autogen.sh es simplemente un pequeño script que invoca el compilador autoconf con los argumentos de comando correctos para usted.
-
Automake también surgió de las prácticas existentes en la comunidad. El proyecto GNU estandarizó un conjunto regular de objetivos para Makefiles:
make all
construiría el proyectomake clean
eliminaría todos los archivos compilados del proyectomake install
instalaría el softwaremake dist
ymake distcheck
prepararía la fuente para su distribución y verificaría que el resultado fuera un paquete completo de código fuenteLa construcción de makefiles compatibles se volvió engorrosa porque había muchas repeticiones repetidas una y otra vez. Por lo tanto, Automake era un nuevo compilador que se integraba con autoconf y procesaba Makefile "fuente" (llamado Makefile.am) en Makefiles que luego se podían alimentar a Autoconf.
La cadena de herramientas automake / autoconf en realidad usa una serie de otras herramientas auxiliares y se complementan con otros componentes para otras tareas específicas. A medida que creció la complejidad de ejecutar estos comandos en orden, nació la necesidad de un script listo para ejecutar, y de aquí surgió autogen.sh.
Hasta donde yo sé, Gnome fue un proyecto que introdujo el uso de este script de ayuda autogen.sh
fuente
Hay dos "Grandes jugadores" en esta área; Cmake y GNU Autotools.
GNU Autotools es la forma en que GNU hace las cosas, y está bastante centrado en * nix. Es una especie de sistema de metaconstrucción, que proporciona un conjunto de herramientas que generan configuraciones específicas y crean archivos para lo que estás tratando de hacer. Esto le ayuda a realizar más cambios en su código sin tener que manipular directamente su sistema de compilación, y ayuda a otros a construir su código de una manera que no había diseñado para - bajo * nix.
Cmake es la forma multiplataforma de hacer las cosas. El equipo de Cmake crea software de muchas, muchas maneras diferentes, con GCC, Visual Studio, XCode, Windows, OSX, Solaris, BSD, GNU / Linux, lo que sea. Si le preocupa la portabilidad de su base de código, este es el camino a seguir.
Como se ha mencionado, algunas personas parecen ser aficionadas a Scons. Si está familiarizado con Python, esto podría proporcionar más consistencia en su entorno de trabajo.
Ruby también tiene una especie de sistema de metaconstrucción llamado Rake, que es bastante bueno por derecho propio, y es muy útil para aquellos que ya están familiarizados con Ruby.
fuente
Scons es un posible reemplazo, aunque no tengo experiencia personal. También se implementa en Python, lo que podría ser un problema, dependiendo del entorno de compilación.
fuente
Si está usando C # / Mono, puede usar msbuild (los archivos .sln / .csproj utilizados por MonoDevelop y Visual Studio) para administrar todo su proceso de compilación.
Luego puede compilar desde MonoDevelop o ejecutar el
xbuild
comando en su terminal favorito (funciona mejor en Mono> = 2.6). Esto es extremadamente fácil y no requiere mucho trabajo de su parte, porque MonoDevelop manejará los archivos msbuild por usted, y no necesitará editarlos a menos que quiera modificar más allá de lo que la interfaz de usuario de MonoDevelop puede hacer por usted.No estoy familiarizado con la forma en que las personas que dependen de msbuild manejan las instalaciones para sus proyectos, pero siempre puedes preguntar eso. ;-)
fuente
Para C # puede usar xbuild (y msbuild en Windows), que construirá el proyecto a partir de sus archivos de proyecto.
fuente