Ir al contenido principal

Deshacerse de los Makefiles: aprenda scons en 5 minutos

A todo el que programa en Linux le habrá pasado que a la hora de compilar cualquier proyecto mínimo hay que hacerse un Makefile. Usualmente modifico uno ya hecho, sin embargo, luego de estudiar la documentación de scons he descubierto que resulta muy fácil utilizarlo para compilaciones sencillas.
Aclaro que esto no pretende ser un manual o tutorial de scons en toda regla. Simplemente intento mostrarles cómo resolver el problema de la compilación en apenas una línea.
Supongamos que tenemos un proyecto compuesto por los ficheros main.c y A1.c. Una compilación sencilla sería lo siguiente:
Creamos un archivo SConstruct con esta línea
Program('test',['main.c','A1.c'])
Ejecutamos scons y ya está. ¿Les resulta familiar algo? Pues si conocen python se percatarán que el segundo parámetro es una lista. Pueden ahorrarse comillas escribiendo lo anterior así:
Program('test',Split('main.c A1.c'))
Sin embargo, la mayoría de los proyectos no serán tan sencillos. En aras de la brevedad saltaré directo al punto. Tenemos los anteriores archivos y además necesitamos enlazar la librería SDL. Este es el caso típico, además de enlazar tenemos que incluir archivos .h. La sintaxis completa sería:
Program('test',Split('main.c A1.c'), LIBS='SDL', LIBPATH='/usr/lib',CPPPATH='/usr/include')
Sencillo, ¿no es así? En una sola línea resolvemos el problema de compilar N archivos.


Comentarios

  1. CMake sería también una opción muy popular en estos momentos.

    ResponderEliminar
  2. Tendré que revisar la documentación de CMake. Creo que olvidé mencionar que scons, al igual que autotools, permite la detección y autoconfiguración de las dependencias.

    ResponderEliminar
  3. Ése es también uno de los puntos fuertes de CMake. Ahora que está empezando a ser muy famoso, se está recopilando una cantidad enorme de scripts de detección de las librerías más populares. Es algo parecido a lo que pasaba con las autotools y los m4 para detectar SDL y otras librerías.

    Por ejemplo, éstos son los que tengo disponibles en mi instalación de Debian:

    FindASPELL.cmake FindEXPAT.cmake FindJasper.cmake FindMFC.cmake FindPhysFS.cmake FindSDL_image.cmake FindTIFF.cmake
    FindAVIFile.cmake FindFLTK.cmake FindJava.cmake FindMotif.cmake FindPike.cmake FindSDL_mixer.cmake FindUnixCommands.cmake
    FindBoost.cmake FindGCCXML.cmake FindJNI.cmake FindMPEG2.cmake FindPkgConfig.cmake FindSDL_net.cmake FindVTK.cmake
    FindBZip2.cmake FindGLU.cmake FindJPEG.cmake FindMPEG.cmake FindPNG.cmake FindSDL_sound.cmake FindWget.cmake
    FindCABLE.cmake FindGLUT.cmake FindKDE3.cmake FindMPI.cmake FindPythonInterp.cmake FindSDL_ttf.cmake FindWish.cmake
    FindCURL.cmake FindGnuplot.cmake FindKDE4.cmake FindOpenAL.cmake FindPythonLibs.cmake FindSelfPackers.cmake FindwxWidgets.cmake
    FindCurses.cmake FindGTK.cmake FindKDE.cmake FindOpenGL.cmake FindQt3.cmake FindSubversion.cmake FindwxWindows.cmake
    FindCygwin.cmake FindHSPELL.cmake FindLATEX.cmake FindOpenSSL.cmake FindQt4.cmake FindSWIG.cmake FindX11.cmake
    FindDart.cmake FindHTMLHelp.cmake FindLibXml2.cmake FindPerl.cmake FindQt.cmake FindTCL.cmake FindXMLRPC.cmake
    FindDCMTK.cmake FindImageMagick.cmake FindLibXslt.cmake FindPerlLibs.cmake FindRuby.cmake FindTclsh.cmake FindZLIB.cmake
    FindDoxygen.cmake FindITK.cmake FindMatlab.cmake FindPHP4.cmake FindSDL.cmake FindThreads.cmake

    Además de C y C++ soporta Java, Fortran...

    ResponderEliminar
  4. Perdón, ése de antes era yo :)

    ResponderEliminar
  5. Vaya, entocnes vale la pena probarlo.

    ResponderEliminar

Publicar un comentario en la entrada

Entradas populares de este blog

Un poco de nostalgia: juegos retro

El Laberinto del Saber es un juego desarrollaod en Cuba a finales de los 80 o algo así, para MS-DOS. Aquí pueden verlo en acción:

Desde hace un buen tiempo que quiero hacer un remake moderno orientado principalmente a plataformas móviles, al principio lo intenté con SDL 2, pero luego decidí usar un motor decente. Entre Godot y Unity3d me decanté por el último, para no invertir tiempo en aprender una herramienta que no me serviría para hacer más juegos.
Sin embargo, el proyecto ya acumula unos seis meses de atraso por diversas razones, y ni siquiera tengo una imagen para mostrar. Así queni hablar de fecha de lanzamiento.

Unity 5.4 está aquí

Y no trae la herramienta de edición de cinemáticas, como esperaba. Al menos, no se hace referencia a ella en las notas de lanzamiento.
Justamente acabo de lograr descargar la 5.3.5, la cual ha sido bastante decepcionante. El MonoDevelop que incluye ha dejado de sugerir el autocompletado para los miembros de algunas clases (me queda por definir cuándo lo hace y cuándo no) y además el precalculado de la iluminación global me suelta una docena de advertencias, aparte de que me ha obligado a recalcular las luces dos veces. Y eso toma bastante tiempo.
Aún no sé si podré echarle el guante a la 5.4, y tampoco es que tenga mucho interés. Aunque supongo que peor no va a ponerse, y quizás hasta se arreglen las cosas.
Por suerte, no estoy programando mucho. Las últimas páginas de la cuarta novela me tienen  bastante ocupado, y también le estoy echando un vistazo a la historia del juego. Sin embargo, eso no será para siempre, en algún momento de esta semana tengo que seguir puliendo el sistema …

Leyendo a Sapkowsky

Este es uno de mis escritores favoritos y es lamentable que haya tan poco de él en español. Aunque hay que reconocer que Andrzej Sapkowsky no ha sido tan prolífico.
A Sapkowsky le basta con su saga de Geralt de Rivia para ser una figura de renombre en la literatura fantástica. La fama de los juegos basados en el personaje del brujo Geralt, me parece, no le han acarreado una fama enorme, porque muchos olvidan (o simplemente no se interesan en averiguar) que el Wiedźmin no fue creado por CD Projekt RED.Por suerte, como les decía, entre los lectores ya Sapkowsky era un referente aún antes de que salieran los juegos.
Tenía entendido que estaba trabajando otra serie de libros, basados en las Guerras Husitas, así que hace poco decidí buscar si ya estaban disponibles en español. Y resulta, que además de los dos libros de dicha saga, me encontré Víbora, un tercero completamente distinto, ambientado en Afganistán durante la invasión soviética.
No obstante, no es de eso que quiero hablarles, sin…