Jueves, Noviembre 8, 2007

Cmake productivo (II) vim + quickfix

Vamos a darle un giro de tuerca a lo que vimos en el post anterior, en este post veremos cómo compilar con cmake usando vim de forma productiva. En primer lugar, necesitamos algo que nos permita compilar un proyecto (de cmake) cuando estamos editando sus ficheros. Mientras editamos los ficheros solemos estar dentro de algún subdirectorio del proyecto con lo que nos bastaría un script que buscara el directorio build y el CMakeLists.txt y lanzara el make.

Es fácil escribir ese script, el mío lo llamo vim-cmake-makeprg y lo tengo accesible en ~/bin . Al ejecutarlo irá subiendo directorios hasta encontrar un CMakeLists.txt y un directorio build. El resultado es que cuando estoy dentro de un proyecto con este comando puedo compilarlo independientemente de donde esté.

Una vez tenemos el script, sólo nos queda decirle a vim que lo utilice para compilar, para ello editamos el ~/.vimrc y añadimos:

set makeprg=vim-cmake-makeprg

Ahora ya podemos trabajar en nuestro proyecto, editamos (con vim) cualquier fichero, empezamos a programar, y para compilar escribiremos:

:make

:make

Aquí es donde comienza la magia de quickfix, en primero se pone a compilar, veremos la salida del proceso de compilación en el buffer de texto de vim. La salida se pasa por un filtro que va capturando los mensajes de error relevantes y los va añadiendo en una lista. Al terminar de compilar vim abrirá el primer fichero que contenga errores y posicionará el cursor en el primer error, también nos mostrará una versión resumida del error:

primer error

Podemos ver la lista completa de errores con el comando cl:

:cc

Finalmente, estos son algunos de los comandos que podemos usar con quickfix:

  • :cl listar los errores
  • :cc mostrar el mensaje completo del error actual
  • :cn moverse al siguiente error
  • :cp moverse al error anterior

Usando vim+quickfix, y cmake tendremos definitivamente una forma mucho más eficiente de programar-compilar-corregir-programar…

posteado por PpluX @ 3:58 pm tags:Programación, Vim, recetas  

Martes, Noviembre 6, 2007

Cmake productivo

Pequeño truco para mejorar nuestra productividad con cmake. La primera recomendación es crear siempre un directorio build dentro de nuestro proyecto. Este directorio no se subiría a ningún repositorio, lo usamos sólo para tener todos los binarios compilados, librerías, etc… separado siempre de nuestro código y cabeceras.

En un escenario típico se entra en el directorio build, se ejecuta “cmake ..”, después make, después bin/nuestro_programa… una y otra y otra vez. Esto lo haremos en una terminal sólo para compilar+ejecutar, en otra terminal o donde sea, tendremos el código que iremos desarrollando. A mi me tiene pasado que no distingo la terminal donde tengo el building del resto, incluso he llegado a cargarme cosas sin querer por culpa de esto. Para evitarlo me he escrito un fichero de aliases de bash que activo cuando estoy en mi directorio de build. El fichero lo podéis descargar de aquí y tiene esta pinta:

cmake-aliases screenshot

se activa escribiendo en el directorio de build:

. cmake-aliases

El punto(.) es importante, indica al shell actual que vamos a incorporar las definiciones de ese fichero. Nota, ese fichero tiene que estar accesible desde el path, o bien os toca poner la ruta completa donde lo tengáis.

Cosas que tiene definidas:

  • cambia el prompt, para hacerlo claramente distinguible. También permite ver más fácilmente los errores de compilación hasta donde llegan.
  • una función “help” para recordarnos que hay definido
  • escribiendo sólamente c, ejecuta cmake ..
  • escribiendo m, ejecuta make -j2 (-j2 para compilar con dos procesos)
  • escribiendo t, ejecuta make test
  • se desactiva “cd” para no cambiar de directorio accidentalmente
  • se pone LANG=”C” para obviar problemas de internacionalización
  • se añade el bin al path, para poder ejecutar rápidamente lo que estemos desarrollando

Espero que a alguno le sirva, como me sirve a mi :)

posteado por PpluX @ 4:05 pm tags:Programación, recetas  

Gestionado con WordPress