Wiki

Clone wiki

SII_c1617 / Practica1-Entorno-desarrollo-Linux

Práctica 1: Entorno de desarrollo bajo Linux

En esta primera práctica se introduce el entorno de desarrollo de aplicaciones en C/C++ en un sistema operativo Linux, utilizando la herramienta CMake para la generación del ejecutable y empleando BitBucket como sistema de control de versiones Git.

Introducción a Linux

En primer lugar, se revisarán las acciones típicas que un alumno debería realizar en una sesión de trabajo y que deberá conocer para el resto de prácticas.

  1. Recordatorio del por qué de la filosofía espartana de UNIX:

    El Terminal: tty, vt100, terminales-serie, hosts

    CLI: Command Line Interface, la shell

  2. Establecimiento de una conexión segura:

  3. Herramientas de ayuda:

    • man

    • which

    • whereis

    • apropos

    • help (para mandatos internos del bash)

  4. Editores disponibles: vi, pico (nano), gedit

  5. Editores opcionales: emacs, eclipse, sublime

  6. Configuración por defecto de una sesión de trabajo interactiva: examen del contenido del fichero .bashrc.

  7. Navegación por la cuenta de usuario: ls, cd, pwd

  8. Gestión de ficheros y directorios: mkdir, cp, mv, rm

  9. Herramientas de compilación, gestión y depuración de código:

    • gcc

    • make

    • Depuradores: gdb, dbx

    • strace

  10. Clientes de correo: mailx, pine, thunderbird, evolution

En esta práctica también se proporciona un código C++ de una aplicación gráfica utilizando las librerías OpenGL y GLUT. La aplicación es el juego del tenis que funciona en modo local para dos jugadores, en el que utilizan el mismo teclado y pantalla.

cmake, git y bitbucket

El primer paso es hacer un "Fork" del repositorio creado para las prácticas de la asignatura. Un “Fork” es una copia de un repositorio. Permite trabajar independientemente en un repositorio sin afectar al proyecto original.

Para ello, navega al repositorio original (IMPORTANTE: accede al de tu profesor de prácticas):

y desde la interfaz web, en el botón del menú de la izquierda Actions, selecciona la opción Fork. Aparecerá un formulario donde debes completar (se requiere autenticación en Bitbucket):

  • El nombre del nuevo repositorio debe llamarse sii-DDDDD (siendo DDDDD el número de matrícula)

  • El nivel de acceso debe ser "público".

Tras esto, pulsa en Fork repository.

El siguiente paso es crear una copia en local para trabajar dentro del directorio de trabajo creado previamente (p. ej. cd matricula). Para ello se hace un "Clone" del repositorio creado:

$ git clone https://USUARIO_ACTUAL@bitbucket.org:USUARIO_PROPIETARIO/sii-DDDDD.git

donde USUARIO_ACTUAL es el usuario del alumno que clona el repositorio y USUARIO_PROPIETARIO es el dueño del repositorio.

Una vez hecho esto, hay que utilizar la herramienta CMake (Cross Platform Make) para generar el ejecutable. Se ofrece dentro del código una versión básica del fichero CMakeLists.txt. Este fichero contiene los mandatos que se van a ejecutar una vez que se modifica el código y hay que regenerar el ejecutable. Suponiendo que el código fuente se encuentra en matricula/practica1/src, se crea el directorio matricula/practica1/build, se accede a él y se ejecuta:

$ cmake ..

para generar los ficheros Makefile en el árbol de directorios que permitan mantener actualizado el código con la herramienta make. Finalmente, para generar el ejecutable hay que ejecutar el mandato make en el directorio de trabajo matricula/practica1/build.

El alumno puede realizar los cambios propuestos tomando como referencia el Capítulo 1 del tutorial recomendado para la herramienta CMake.

EJERCICIO INDIVIDUAL

El objetivo de este ejercicio es familiarizarse con las herramientas de desarrollo en Linux antes de empezar a modificar el código fuente facilitado para la realización de las prácticas. Para ello, los alumnos deben modificar las cabeceras de los ficheros fuente incorporando alguna etiqueta que les identifique como autores de ese código. También deben renombrar el directorio practica4 a practica5.

Los alumnos deben añadir un fichero Changelog donde indique un texto descriptivo de los cambios realizados en el código antes de completar cada commit.

El alumno debe familiarizarse con las opciones "status" y "log":

$ git status
$ git log  

Los alumnos deben marcar localmente los ficheros cambiados mediante

$ git add fichero1 fichero2 directorio1

para añadirlos al siguiente commit. Una vez se hayan marcado los cambios, se realiza el "commit" local indicando un mensaje explicativo:

$ git commit -m 'Mensaje del commit'

A continuación, se debe subir el código al repositorio remoto:

$ git push origin master

Los alumnos deben actualizar su repositorio local con el último "commit" mediante el mandato "pull" (en este caso no debería haber conflictos):

$ git pull

Existen mandatos adicionales para:

  • Deshacer los cambios de un fichero modificado:
    $ git checkout fichero1
    
  • Crear una rama:
    $ git branch nombre_rama
    
  • Cambiar a una determinada rama:
    $ git checkout nombre_rama
    

Por último, uno de los alumnos debe crear una etiqueta (tag) para indicar el nuevo número de versión y enviarla al servidor remoto. Se pueden comprobar las etiquetas existentes:

$ git tag
A continuación, mediante los siguientes mandatos, se sube al repositorio la versión con etiqueta 1.1:

$ git tag -a v1.1 -m 'Mensaje version 1.1'
$ git push origin v1.1 

Las distintas etiquetas servirán para distinguir el trabajo realizado en cada una de las cinco prácticas. Al final de esta práctica, debes haber creado una etiqueta en el repositorio con el mensaje 'Fin de la práctica 1' para marcar el hito.

Los archivos que no quieren controlarse pueden ignorarse editando el fichero .git/info/exclude

Recuerda que puedes utilizar la interfaz gráfica de git y gitk si están instaladas en el equipo de trabajo: gitk o git-gui

Los alumnos deben subir todo el código a Bitbucket para ser evaluados por el profesor al comienzo de la práctica 2.

Referencias adicionales

Updated