Tengo un programa bastante grande escrito en C. Abarca varios archivos y tiene un poco de reorganización para intentar compensar los problemas de la plataforma. Específicamente, tengo archivos de cabecera para diferentes sistemas operativos, arquitecturas y compiladores que definen las macros que utiliza para manejar cosas. Como ejemplo, el indicador -v
imprime información de versión, incluido el nombre del compilador que la creó y el sistema operativo y la arquitectura en la que se creó. Como un ejemplo de por qué es importante, el programa puede crear un archivo de código C y, si lo desea, compilarlo, una tarea para la que simplemente hace una llamada al sistema al compilador con el que se construyó.Cómo reconfigurar un programa grande para GNU Autotools
También tiene soporte para la biblioteca GNU Readline (o la biblioteca BSD Editline - lo mismo) si se encuentra en su sistema, así como un equivalente sin todas las características agradables Readline que es puro ANSI si no lo hace t lo tengo.
La conclusión es que no puedo extraer ninguno de los bits dependientes de la plataforma, ya que varias funciones dependen bastante de qué OS/arquitectura/compilador tenga. También quiero proporcionar una buena funcionalidad a quienes lo tienen. Y quiero que las personas lo descarguen e instalen con una interfaz estándar ./configure
, make
y make install
.
Actualmente estoy usando un script de shell hecho apesadumbrado para configure
que crea el Makefile desde cero, y determina qué archivos de cabecera incluir en función de su OS/architecture/compiler. Me gustaría un enfoque más eficiente, y me gustaría utilizar un sistema de compilación más estándar usando GNU Autotools. De esa forma sé que lo que haga funcionará en la computadora de otra persona sin tener que ir a probarlo en sus computadoras.
Mi pregunta, para aquellos de ustedes que han recorrido todo eso (¡gracias!), Es: 1) ¿Cómo hago para pasar de un sistema de compilación casero a GNU Autotools? 2) ¿Qué buenos tutoriales hay para comenzar con GNU Autotools? 3) ¿Cómo puedo hacer esto un proceso relativamente indoloro?