CUESTIÓN

Me gustaría con los mismos ficheros que las prácticas me funcionaran tanto en casa con Linux como en clase con el servidor.

SOLUCIÓN

Casi todas las llamadas al sistema y el código que escribáis para Linux funcionará sin ninguna modificación en el servidor. Sin embargo, habrá veces en que algunas zonas del código sean diferentes para ambos sistemas.

En ese caso, lo mejor es recurrir a la compilación condicional basada en la definición de una macro. La compilación condicional tiene la ventaja de que en el ejecutable solamente aparece y ocupa sitio el código propio de cada sistema.
/*****************************************************/
/* Aquí irá la zona común para el servidor y Linux   */
/*****************************************************/
#ifdef LINUX_SOURCE
    /*******************************************/
    /* Aquí metemos el código propio de Linux  */
    /*******************************************/
#else
    /*******************************************************/
    /* Aquí metemos el código propio del servidor de clase */
    /*******************************************************/
#endif
/*****************************************************/
/* Aquí sigue la zona común para el servidor y Linux */
/*****************************************************/
El fichero makefile también tiene que tener alguna diferencia. Tiene que definir la macro LINUX_SOURCE para Linux y no para el servidor. Aquí va una posibilidad de cómo hacer esto para un programa que se llame programa.c:
nada:
<TAB>@echo "Teclea make linux o make clase."

clase:
<TAB>@make programa

linux:
<TAB>@make CCOPTS=-DLINUX_SOURCE programa

programa: programa.o
<TAB>gcc $(CCOPTS) programa.o -o programa

programa.o: programa.c programa.h
<TAB>gcc $(CCOPTS) -c programa.c


© 2010 Guillermo González Talaván y Ana Belén Gil González