SlideShare una empresa de Scribd logo
1 de 37
Descargar para leer sin conexión
Makefile (Archivo de descripción de
compilación)
Iván Luis Jiménez
14 de agosto de 2015
1
Introducción
El compilar un programa es sencillo si este consta de un sólo archivo. En la
práctica no es funcional tener un sólo archivo para un programa, tarde o tem-
prano el tamaño del programa se hará inmanejable.
Se dificulta que varios programadores trabajen simultáneamente en el programa,
se debe dividir un programa en varios archivos, pero el hacer esto deficulta su
compilación.
La herramienta make facilita la tarea de compilación de un programa dividido
en varios archivos.
Todo lo mencionado es aplicado a un entorno de desarrollo creado propiamente
por el programador, es decir, sin usar un IDE (entorno de desarrollo integrado).
2
Make
Es una utilería de UNIX que genera y ejecuta comandos de shell de UNIX.
Make automáticamente guarda un registro de los archivos que han cambiado y
recompila cuando es necesario. Ahorra tiempo de desarrollo.
Makefile
El make usa un archivo de descripción, conocido como makefile o Makefile, y
algunas plantillas generales para determinar las dependencias entre los archivos.
De este archivo make deduce la información necesaria de la hora de la última
modificación de los archivos como esta registrada en el sistema de archivos.
Como hemos entendido, el makefile o Makefile nos ayudará a decirle a make
como es que debe tratar a un archivo o directorios.
3
Hola Mundo!
El objetivo de éste documento es enseñarte cómo compilar varios módulos de un
programa escrito en C usando la herramienta make, auxiliandonos del archivo
makefile. También lo podemos hacer para C++, sólo tendremos que modificar
algunas lineas en el makefile, pero no lo mostraré en éste documento.
En nuestro ejemplo práctico veremos como compilar varios módulos de un pro-
grama escrito en C.
Los módulos estarán en varias carpetas, dependiendo de su función que realizará.
Nos apoyaremos de make y shells scripts para compilar todos los módulos y no
de uno en uno.
Al final se generarán dos ejecutables e imprimirán en terminal un mensaje de
hola mundo y otros mensajes, los verás al finalizar ésta práctica.
4
Entorno de Desarrollo
Para esta prática trabajaré con el sistema Linux, ya que éste trae preinstalado
la utilería make. En particular con Kali.
Con el comando:
make␣--version
Veremos la versión de make
Nuestro proyecto debe tener un arbol de directorios como se muestra en la sigu-
iente imagen:
Lo crearemos manualmente:
mkdir␣holamundo
cd␣holamundo
Con el comando mkdir:
creamos la carpeta holamundo.
Con el comando cd:
5
estamos ingresando a la carpeta holamundo.
Con los comandos:
ls
cd␣..
con ls podemos listar los directorios
con cd .. podemos retroceder un directorio atrás. Por ejemplo si me encuentro
dentro de la carpeta cv y tecleo cd .. regresaría nuevamente al directorio raíz o
principal de mi proyecto holamundo.
Bueno, ahora que ya sabes como crear una carpeta, ingresar en ella, listar y
moverte sobre los directorios, debes crear todo el árbol de directorios para poder
trabajar con el proyecto holamundo.
Que inicie la acción!
Una vez que tenemos el árbol de directorios creados procedemos a crear los
archivos, iré colocando el código en imagen para que no cometamos el error de
copiar y pegar el código.
Entramos a la carpeta fuente, es en ésta en la cual nos ocuparemos.
Yo sólo tengo cuatro carpetas, ustedes tendrán mas, pero para éste ejemplo
sólo ocuparemos éstas. No se enojen, al contrario, aprendieron.
Ahora entramos a la carpeta holamundo, ustedes no tendrán ningún archivo.
Su tarea ahora será crear los archivos siguientes: compilar.sh, holamundo.c,
LEE.ME, makefile
6
vemos que todos tienen extención, menos el makefile. Para crear los archivos
podemos hacerlo de varias maneras, yo les mostraré una.
El programa o modulo de VIM nos permite crear y editar archivos, entre muchas
otras cosas mas, utilizaremos este ya que también es muy fácil de conseguir.
En mi caso ya he creado los archivos.
Para crearlos usaremos la siguiente instrucción:
vim␣nombre_archivo
Vemos que es muy sencillo. Una vez que damos enter, la terminal pasará a
ser un editor de texto:
Si hemos creado el archivo makefile entonces teclearemos el siguiente código
dentro del archivo, para iniciar a escribir teclearemos la tecla i, de esta manera
el editor entenderá que vamos a insertar texto, en la parte inferior veremos un
mensaje que indica el modo en que nos encontramos, normal, insertar, coman-
dos o visual.
En modo normal sólo podemos navegar sobre el archivo pero no podemos editar
nada.
En modo insertar podemos agregar y eliminar texto.
En modo comandos podemos darle instrucciones como guardar, cerrar, y muchas
otras cosas mas.
En modo visual, nos mostrará algunas opciones visuales, cambiar el modo de la
ventana, abrir otro archivo en la misma terminal, etc.
VIM es un mundo. Paso a pasito!
Como dije, colocaremos el siguiente código dentro del archivo makefile:
7
De la linea 7 ala 12 estamos definiendo algunos macros, en nuestro lenguaje
sería como “variables”.
Linea 7 : estamos definiendo el compilador, como dije al inicio el ejemplo es-
tará escrito en el Lenguaje C, por lo tanto el compilardor será gcc. La variable
COMPILADOR puede cambiar, puede ser COM, COMPI o como queramos,
sólo que siempre debe ser en mayúsculas y siempre debe ser la primera linea en
el archivo.
Linea 8 : estamos definiendo una variable o macro FUENTE que indicará en
8
donde se encuentra cada archivo que vamos a compilar, los archivos .c deben
estar separados por un espacio, en el caso del archivo holamundo.c se encuentra
en el mismo directorio que el makefile por lo tanto no es necesario indicar la ruta,
pero el archivo saludo.c se encuenta en otro directorio, la cual se esta indicando
en la variable RUTA_SALUDO que no se encuentra definida en el makefile,
ésta variable es pasada desde el archivo compilar.sh, mas adelante explicaré este
archivo.
Linea 9 : en ésta linea estamos definiendo el tipo de objetos que vamos a leer
y que tipos de archivos vamos a obtener. En la linea 8 estamos definiendo
FUENTE que es en éste caso todos los archivos con extención .c, es decir, todo
los archivos fuente, seguido de la variable OBJS tenemos un signo igual, pesitos,
la variable FUENTE, dos puntos y la extención .c es decir se complementa el
archivo .c, éste sería el archivo entrante y depués del signo igual tenemos .o, que
vendría siendo el archivo objeto resultante. Con las dos últimas linea explicadas
estaríamos haciendo lo siguiente:
holamundo.c ruta/saludo.c holamudo.o saludo.o
En otras palabras estamos particionando el compilado de todos los archivos .c.
. Si lo hicieramos parte por parte sería:
gcc holamundo.c ruta/saludo.o -o holamundo.o saludo.o
Para ahorrarnos de escribir todo esto y para cada unos de los archivo que con-
forma el proyecto holamundo, realizamos el makefile.
Linea 10 : en ésta linea estamos creando la macro HEADER en la que se
guarda el nombre del archivo header que se incluirá en los archivos holamundo.c
y saludo.c
Linea 11 : en ésta linea estamos creando otra macro llamada LIB, en la que se
le está asignando la cadena util. En la compilación crearemos también librerías,
en nuestro caso propias de nosotros. La librería se llamará util.
Linea 12 : ésta linea guarda la ruta y el nombre del ejecutable final.
Las siguientes lineas son como “métodos”, pero se llaman dependencias, es decir,
están definidos para cuando el usuario al momento de compilar las necesite. De
lado izquierdo de los : tenemos el objetivo y a la derecha están los prerrequisi-
tos.
Para la linea 14 el objetivo sería $(PROG) y los prerrequisitos $(OBJS), después
de esta linea tenemos lo que realiza ésta dependencia, es decir, compilar. La
linea 15 se traducería de la siguiente manera:
gcc␣holamundo.c␣ruta_saludo/saludo.c␣-L␣ruta_lib␣-l␣nombre_lib␣-lm␣-o
Lo que esta haciendo es compilar, con -L indica la ruta de la librería a crear,
-l indica el nombre de la librearía, -lm indica que vamos a incluir una librearía
matemática y -o para cambiar el nombre del archivo de salida.
En la linea 16 se imprime un mensaje en consola, para indicar que a termi-
nado de compilar. El “método” anterior se ejecuta automáticamente al invocar
a MAKE.
Los “métodos” LIMPIA y BORRA se invocan hasta que el usuario los invoque.
9
La dependencia en la linea 26 -> .c.o también realiza algo similar a la linea
16, los asteriscos indican que todos los archivos que se encuentren en la ruta
indicada con -I serán compilados y se obtendrá archivos objetos.
Como podemos observar, los métodos sólo eliminan todos los archivos objetos
y el ejecutable.
La última linea no hace nada, simplemente “verifica la compilación”, checa que
exista la ruta de los archivos que se van a incluir.
NOTA: El archivo Makefile contiene una sintaxis, en el ejemplo se ve perfec-
tamente. Para indicar las operaciones de cada macro se debe dar los espacios
con tabuladores. Respetar los espacios que se observan, entre la definición de la
macro o el objetivo, dos puntos y los prerrequisitos.
Espero que hasta este punto ya tengas una idea de lo que es un archivo makefile
y cual es su función.
Ahora pasaremos a crear y llenar el archivo holamundo.c
Este archivo contiene código C. No explicaré el codigo completamente, sólo en
pocas palabras.
Creamos el archivo:
Tecleamos enter y presionamos la tecla i para impezar a teclear el código sigu-
iente:
10
Sólo mandamos a invocar los métodos en el método main.
Para guardar los cambios tecleamos :w para guardar los cambios, si queremos
salir del archivo tecleamos :q, si queremos guardar y salir a la vez tecleamos
:wq.
Ahora sigamos con el siguiente archivo, LEE.ME, éste archivo sólo contiene una
pequeña descripción del módulo.
11
Y guardamos y salimos del editor.
El últimos archivo de éste módulo es compilar.sh. Dentro de él, tecleamos
el siguiente código:
12
Este es un archivo bash, nos permite ejecutar comandos en la terminal, con
esto podemos automatizar operaciones. El comando pwd recoge o muestra la
ubicación actual. El comando cd entra o se ubica en el directorio que se indica
despues de un espacio. Podemos crear variables, las variables en un bash no se
declaran, toman el valor que se les asigne.
Con esto podemos entender el archivo bash. La última linea ejecuta el make,
utilizando el makefile, como ya hemos visto, éste archivo es llamado automáti-
camente al ejecutar make, el archivo bash le manda las variables que estaban
sin crear en el makefile, como podemos observar, despues de la instrucción make
tenemos la asignación de cada variable, y ese valor se le manda al makefile.
De manera general sólo recoge la ubicación de los archivos necesarios y se los
manda al makefile para compilar.
13
Ya tenemos todos los archivos de ese modulo. Ahora ya tienes un poco de
práctica para que puedas crear los módulos que hacen falta. Sólo te indicaré
el código que irá en cada archivo y tu iras creando y llenando los archivos. La
explicación es la misma, si entendiste lo anterior, entenderás lo que sigue.
Dentro de la carpeta que se encuenta en holamundo/fuente/saludo esta vacia,
crearemos los siguiente archivos:
compilar.sh␣LEE.ME␣makefile␣saludo.c␣stub.c
El archivo bash compilar.sh tendrá el siguiente código:
El archivo LEE.ME tendrá:
14
El archivo makefile tendrá:
15
El archivo saludo.c tendrá:
16
El archivo stub.c tendrá:
17
Ya tenemos listo el modulo saludo. Ahora nos dirijimos a la carpeta lib que
se encuentra en holamundo/fuente/lib y debemos crear los siguientes archivos:
cadena.c␣compilar.sh␣LEE.ME␣makefile␣salir.c
El archivo cadena.c tendrá:
18
19
20
21
22
23
El archivo compilar.sh tendrá:
El archivo LEE.ME tendrá:
24
El archivo makefile tendrá:
25
El archivo salir.c tendrá:
26
27
28
29
Ahora nos dirijimos a la carpeta incl que se encuentra en holamundo/fuente/incl
y debemos crear los siguientes archivos:
cadena.h␣holamundo.h␣LEE.ME␣salir.h
El archivo cadena.c tendrá:
30
El archivo holamundo.h tendrá:
31
El archivo LEE.ME tendrá:
El archivo salir.h tendrá:
32
Parece que ya tenemos todo lo necesario para hacer funcionar el proyecto hola-
mundo. Tenemos cuatro carpetas dentro de la carpeta fuente, holamundo, incl,
lib, y saludo, todos menos incl son módulos, la carpeta incl no tiene makefile,
por lo tanto podemos compilar holamundo, lib y saludo.
33
Compilación
Para compilarlos haremos lo siguiente:
Recordemos que hay un archivo bash que nos ayudará a compilar. Para ejecutar
un archivo bash con extención .sh podemos hacerlo de varias maneras, dos de
ellas son:
sh␣compilar.sh
./compilar.sh
Cualquiera de las dos funciona igual. Puede ser que el archivo no tenga permisos
para ejecutarse, para darle permisos tecleamos:
chmod␣+x␣compilar.sh
y después volvemos a ejecutarlo con cualquiera de los dos comandos anteriores.
OK. Nos dirijimos a holamundo/fuente/holamundo/ y ejecutamos para compi-
lar el modulo holamundo.
Ejecuta los comandos y muestra el mensaje de “Compilación terminada”, y hace-
mos un ls para ver los archivo nuevos que se acaban de crear, hay un archivo
nuevo llamado holamundo.c y en el directorio holamundo/bin/ hay un archivo
ejecutable llamado holamundo, ya se a creado el ejecutable de ese modulo!.
Si queremos ejecutar las macros BORRA o LIMPIA hacemos lo siguiente:
En vez de teclear ./compilar.sh o sh compilar.sh teclearemos:
make␣BORRA
make␣LIMPIA
Dependiendo de lo que queramos hacer, estos macros no se pueden ejecutar
automáticamente, es por eso que se deben mandar a llamar. Si los hacemos se
34
eliminarán todos los archivos que se hallan creado al compilar.
Bueno, ahora nos dirijimos al directorio /holamundo/fuente/saludo/ para com-
pilar el modulo saludo y hacemos lo mismo que lo anterior.
Y ahora nos dirijimos a la ruta /holamundo/fuente/lib/ para compilar ese mod-
ulo y se creen las librerias correspondientes. Hasta este momento en la ruta
/holamundo/bin/ ya se encuentra dos archivo ejecutables. El modulo lib no
creará ejecutables sino mas bien empaquetará las librerías usadas en los módu-
los anteriores, en un archivo .a.
Ejecuación
El archivo que se crea se encuentra en /holamundo/lib/libutil.a
35
Con esto ya hemos terminado la compilación de todos los módulos.
Nos dirijimos a /holamundo/bin/ para ver los ejecutables y ver que mensajes
nos muestran. ;-)
En caso de que nos diga permiso denegado, le damos permiso con el comando
visto anteriormente:
chmod␣+x␣holamundo
chmod␣+x␣saludo
Bueno!, eso fue el proyecto de holamundo.
36
Si tienes alguna duda mandar correo a: ivanthebest10@gmail.com o ivan_luisj@hotmail.com
Puedes visitar mi blog: ivanovich-hacker.blogspot.mx
Puedes distribuir libremente éste documento. Si deseas copiar y pegar parte
del texto de éste documento debes dar los créditos correspondientes a Iván Luis
Jiménez.
Compilado el 19 de agosto de 2017 con LATEX usando LYX
37

Más contenido relacionado

La actualidad más candente

Tipos de módems, estandares y protocolos
Tipos de módems, estandares y protocolosTipos de módems, estandares y protocolos
Tipos de módems, estandares y protocolosLucre Castillo Lorenzo
 
Medios de Transmision No Guiados
Medios de Transmision No GuiadosMedios de Transmision No Guiados
Medios de Transmision No GuiadosUPTM
 
Unidad 2 TELECOMUNICACIONES
Unidad 2 TELECOMUNICACIONESUnidad 2 TELECOMUNICACIONES
Unidad 2 TELECOMUNICACIONESIsluan Huerta
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionEduardo J Onofre
 
Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPUIvan Porras
 
Sistema de archivos cuestionario
Sistema de archivos cuestionarioSistema de archivos cuestionario
Sistema de archivos cuestionarioJhinmy Tali Melgar
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
Acceso Directo a la Memoria - DMA
Acceso Directo a la Memoria - DMAAcceso Directo a la Memoria - DMA
Acceso Directo a la Memoria - DMAErika Rodríguez
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARESAnel Sosa
 
Introduccion a la computación paralela
Introduccion a la computación paralelaIntroduccion a la computación paralela
Introduccion a la computación paralelaRene Guaman-Quinche
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativosPatriciaDavila16
 
Protocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemProtocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemMirna L. Torres Garcia
 
Sistemas operativos distribuidos
Sistemas operativos distribuidosSistemas operativos distribuidos
Sistemas operativos distribuidosChristian19121
 

La actualidad más candente (20)

Tipos de módems, estandares y protocolos
Tipos de módems, estandares y protocolosTipos de módems, estandares y protocolos
Tipos de módems, estandares y protocolos
 
U2S2: Memoria Principal (RAM)
U2S2: Memoria Principal (RAM)U2S2: Memoria Principal (RAM)
U2S2: Memoria Principal (RAM)
 
Medios de Transmision No Guiados
Medios de Transmision No GuiadosMedios de Transmision No Guiados
Medios de Transmision No Guiados
 
Unidad 2 TELECOMUNICACIONES
Unidad 2 TELECOMUNICACIONESUnidad 2 TELECOMUNICACIONES
Unidad 2 TELECOMUNICACIONES
 
Segmentacion de memoria
Segmentacion de memoriaSegmentacion de memoria
Segmentacion de memoria
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacion
 
Registros de control y estados de la CPU
Registros de control y estados de la CPURegistros de control y estados de la CPU
Registros de control y estados de la CPU
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Sistema de archivos cuestionario
Sistema de archivos cuestionarioSistema de archivos cuestionario
Sistema de archivos cuestionario
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
Acceso Directo a la Memoria - DMA
Acceso Directo a la Memoria - DMAAcceso Directo a la Memoria - DMA
Acceso Directo a la Memoria - DMA
 
ESPRESIONES REGULARES
ESPRESIONES REGULARESESPRESIONES REGULARES
ESPRESIONES REGULARES
 
Introduccion a la computación paralela
Introduccion a la computación paralelaIntroduccion a la computación paralela
Introduccion a la computación paralela
 
Packet tracer
Packet tracerPacket tracer
Packet tracer
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos100 ejercicios-resueltos-de-sistemas-operativos
100 ejercicios-resueltos-de-sistemas-operativos
 
Protocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemProtocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modem
 
Sistemas operativos distribuidos
Sistemas operativos distribuidosSistemas operativos distribuidos
Sistemas operativos distribuidos
 
Analisis Algoritmo
Analisis AlgoritmoAnalisis Algoritmo
Analisis Algoritmo
 

Similar a Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo con C)

Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++juliancetis109
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++juliancetis109
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_oscar020615
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++oscar020615
 
411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdfxavazque2
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Creación de extensiones nativas
Creación de extensiones nativasCreación de extensiones nativas
Creación de extensiones nativasAngel Vazquez
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a ObjetosManuel Antonio
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)Darwin Durand
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
INFOSAN Delphi 753-914
INFOSAN Delphi  753-914INFOSAN Delphi  753-914
INFOSAN Delphi 753-914FRANCIACOCO
 

Similar a Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo con C) (20)

Compilación de programas
Compilación de programasCompilación de programas
Compilación de programas
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Tutorial de visual C++
Tutorial de visual C++Tutorial de visual C++
Tutorial de visual C++
 
Tutorial de visual_c_
Tutorial de visual_c_Tutorial de visual_c_
Tutorial de visual_c_
 
Tutorial de visual c++
Tutorial de visual c++Tutorial de visual c++
Tutorial de visual c++
 
Curso de delphi
Curso de delphiCurso de delphi
Curso de delphi
 
411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf411958729 curso-de-delphi-pdf
411958729 curso-de-delphi-pdf
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Que son los archivos batch
Que son los archivos batchQue son los archivos batch
Que son los archivos batch
 
Creación de extensiones nativas
Creación de extensiones nativasCreación de extensiones nativas
Creación de extensiones nativas
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
2 poo u1 2 Hola mundo
2 poo u1 2 Hola mundo2 poo u1 2 Hola mundo
2 poo u1 2 Hola mundo
 
mysql y visual c++.pdf
mysql y visual c++.pdfmysql y visual c++.pdf
mysql y visual c++.pdf
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Clase2 (consola linux)
Clase2 (consola linux)Clase2 (consola linux)
Clase2 (consola linux)
 
INFOSAN Delphi 753-914
INFOSAN Delphi  753-914INFOSAN Delphi  753-914
INFOSAN Delphi 753-914
 
PROGRAMACION
PROGRAMACIONPROGRAMACION
PROGRAMACION
 
Resumen semana2
Resumen semana2Resumen semana2
Resumen semana2
 
introduccion pdf
introduccion pdfintroduccion pdf
introduccion pdf
 

Más de Ivan Luis Jimenez

PelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodosPelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodosIvan Luis Jimenez
 
Métodos en Java-Con ejemplos
Métodos en Java-Con ejemplosMétodos en Java-Con ejemplos
Métodos en Java-Con ejemplosIvan Luis Jimenez
 
Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)Ivan Luis Jimenez
 
Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...Ivan Luis Jimenez
 
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundoEjemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundoIvan Luis Jimenez
 
Comandos básicos para crear VLANs
Comandos básicos para crear  VLANsComandos básicos para crear  VLANs
Comandos básicos para crear VLANsIvan Luis Jimenez
 
Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2Ivan Luis Jimenez
 
Práctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltajePráctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltajeIvan Luis Jimenez
 
Creación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer StudentCreación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer StudentIvan Luis Jimenez
 
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para DesarrolladoresConfigurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para DesarrolladoresIvan Luis Jimenez
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCIvan Luis Jimenez
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXIvan Luis Jimenez
 
Practica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLPractica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLIvan Luis Jimenez
 
Conexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQLConexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQLIvan Luis Jimenez
 
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)Ivan Luis Jimenez
 

Más de Ivan Luis Jimenez (15)

PelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodosPelicanHPC Implementación fisica con dos nodos
PelicanHPC Implementación fisica con dos nodos
 
Métodos en Java-Con ejemplos
Métodos en Java-Con ejemplosMétodos en Java-Con ejemplos
Métodos en Java-Con ejemplos
 
Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)Aplicación de los Clusters en la empresas (Amazon Redshift)
Aplicación de los Clusters en la empresas (Amazon Redshift)
 
Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...Manipulación del contraste de una imágen monocromática por transformación exp...
Manipulación del contraste de una imágen monocromática por transformación exp...
 
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundoEjemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
Ejemplo de Makefile en LINUX con lenguaje C compilando HolaMundo
 
Comandos básicos para crear VLANs
Comandos básicos para crear  VLANsComandos básicos para crear  VLANs
Comandos básicos para crear VLANs
 
Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2Enrutamiento Dinámico con RIPv1 y RIPv2
Enrutamiento Dinámico con RIPv1 y RIPv2
 
Práctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltajePráctica: Medición de voltaje en circuitos con dos fuentes de voltaje
Práctica: Medición de voltaje en circuitos con dos fuentes de voltaje
 
Creación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer StudentCreación de VLANs (subredes) desde Cisco Packet Tracer Student
Creación de VLANs (subredes) desde Cisco Packet Tracer Student
 
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para DesarrolladoresConfigurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
Configurando Ambiente de Desarrollo WEB en Eclipse Neón para Desarrolladores
 
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPCEjemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
Ejemplo de RPC (Servidor de Archivos) enviar archivo en Java utilizando RPC
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
Practica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQLPractica- Transacciones y Concurrencia en Oracle y MySQL
Practica- Transacciones y Concurrencia en Oracle y MySQL
 
Conexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQLConexión remota a base de datos con Oracle y MySQL
Conexión remota a base de datos con Oracle y MySQL
 
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
Acceso a una base de datos mediante un servidor (Conexión a oracle y mysql)
 

Último

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicaFlor Idalia Espinoza Ortega
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 

Último (20)

CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
celula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamicacelula, tipos, teoria celular, energia y dinamica
celula, tipos, teoria celular, energia y dinamica
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 

Ejemplo práctico de uso de Makefile en LINUX (Compilando modulos de holamundo con C)

  • 1. Makefile (Archivo de descripción de compilación) Iván Luis Jiménez 14 de agosto de 2015 1
  • 2. Introducción El compilar un programa es sencillo si este consta de un sólo archivo. En la práctica no es funcional tener un sólo archivo para un programa, tarde o tem- prano el tamaño del programa se hará inmanejable. Se dificulta que varios programadores trabajen simultáneamente en el programa, se debe dividir un programa en varios archivos, pero el hacer esto deficulta su compilación. La herramienta make facilita la tarea de compilación de un programa dividido en varios archivos. Todo lo mencionado es aplicado a un entorno de desarrollo creado propiamente por el programador, es decir, sin usar un IDE (entorno de desarrollo integrado). 2
  • 3. Make Es una utilería de UNIX que genera y ejecuta comandos de shell de UNIX. Make automáticamente guarda un registro de los archivos que han cambiado y recompila cuando es necesario. Ahorra tiempo de desarrollo. Makefile El make usa un archivo de descripción, conocido como makefile o Makefile, y algunas plantillas generales para determinar las dependencias entre los archivos. De este archivo make deduce la información necesaria de la hora de la última modificación de los archivos como esta registrada en el sistema de archivos. Como hemos entendido, el makefile o Makefile nos ayudará a decirle a make como es que debe tratar a un archivo o directorios. 3
  • 4. Hola Mundo! El objetivo de éste documento es enseñarte cómo compilar varios módulos de un programa escrito en C usando la herramienta make, auxiliandonos del archivo makefile. También lo podemos hacer para C++, sólo tendremos que modificar algunas lineas en el makefile, pero no lo mostraré en éste documento. En nuestro ejemplo práctico veremos como compilar varios módulos de un pro- grama escrito en C. Los módulos estarán en varias carpetas, dependiendo de su función que realizará. Nos apoyaremos de make y shells scripts para compilar todos los módulos y no de uno en uno. Al final se generarán dos ejecutables e imprimirán en terminal un mensaje de hola mundo y otros mensajes, los verás al finalizar ésta práctica. 4
  • 5. Entorno de Desarrollo Para esta prática trabajaré con el sistema Linux, ya que éste trae preinstalado la utilería make. En particular con Kali. Con el comando: make␣--version Veremos la versión de make Nuestro proyecto debe tener un arbol de directorios como se muestra en la sigu- iente imagen: Lo crearemos manualmente: mkdir␣holamundo cd␣holamundo Con el comando mkdir: creamos la carpeta holamundo. Con el comando cd: 5
  • 6. estamos ingresando a la carpeta holamundo. Con los comandos: ls cd␣.. con ls podemos listar los directorios con cd .. podemos retroceder un directorio atrás. Por ejemplo si me encuentro dentro de la carpeta cv y tecleo cd .. regresaría nuevamente al directorio raíz o principal de mi proyecto holamundo. Bueno, ahora que ya sabes como crear una carpeta, ingresar en ella, listar y moverte sobre los directorios, debes crear todo el árbol de directorios para poder trabajar con el proyecto holamundo. Que inicie la acción! Una vez que tenemos el árbol de directorios creados procedemos a crear los archivos, iré colocando el código en imagen para que no cometamos el error de copiar y pegar el código. Entramos a la carpeta fuente, es en ésta en la cual nos ocuparemos. Yo sólo tengo cuatro carpetas, ustedes tendrán mas, pero para éste ejemplo sólo ocuparemos éstas. No se enojen, al contrario, aprendieron. Ahora entramos a la carpeta holamundo, ustedes no tendrán ningún archivo. Su tarea ahora será crear los archivos siguientes: compilar.sh, holamundo.c, LEE.ME, makefile 6
  • 7. vemos que todos tienen extención, menos el makefile. Para crear los archivos podemos hacerlo de varias maneras, yo les mostraré una. El programa o modulo de VIM nos permite crear y editar archivos, entre muchas otras cosas mas, utilizaremos este ya que también es muy fácil de conseguir. En mi caso ya he creado los archivos. Para crearlos usaremos la siguiente instrucción: vim␣nombre_archivo Vemos que es muy sencillo. Una vez que damos enter, la terminal pasará a ser un editor de texto: Si hemos creado el archivo makefile entonces teclearemos el siguiente código dentro del archivo, para iniciar a escribir teclearemos la tecla i, de esta manera el editor entenderá que vamos a insertar texto, en la parte inferior veremos un mensaje que indica el modo en que nos encontramos, normal, insertar, coman- dos o visual. En modo normal sólo podemos navegar sobre el archivo pero no podemos editar nada. En modo insertar podemos agregar y eliminar texto. En modo comandos podemos darle instrucciones como guardar, cerrar, y muchas otras cosas mas. En modo visual, nos mostrará algunas opciones visuales, cambiar el modo de la ventana, abrir otro archivo en la misma terminal, etc. VIM es un mundo. Paso a pasito! Como dije, colocaremos el siguiente código dentro del archivo makefile: 7
  • 8. De la linea 7 ala 12 estamos definiendo algunos macros, en nuestro lenguaje sería como “variables”. Linea 7 : estamos definiendo el compilador, como dije al inicio el ejemplo es- tará escrito en el Lenguaje C, por lo tanto el compilardor será gcc. La variable COMPILADOR puede cambiar, puede ser COM, COMPI o como queramos, sólo que siempre debe ser en mayúsculas y siempre debe ser la primera linea en el archivo. Linea 8 : estamos definiendo una variable o macro FUENTE que indicará en 8
  • 9. donde se encuentra cada archivo que vamos a compilar, los archivos .c deben estar separados por un espacio, en el caso del archivo holamundo.c se encuentra en el mismo directorio que el makefile por lo tanto no es necesario indicar la ruta, pero el archivo saludo.c se encuenta en otro directorio, la cual se esta indicando en la variable RUTA_SALUDO que no se encuentra definida en el makefile, ésta variable es pasada desde el archivo compilar.sh, mas adelante explicaré este archivo. Linea 9 : en ésta linea estamos definiendo el tipo de objetos que vamos a leer y que tipos de archivos vamos a obtener. En la linea 8 estamos definiendo FUENTE que es en éste caso todos los archivos con extención .c, es decir, todo los archivos fuente, seguido de la variable OBJS tenemos un signo igual, pesitos, la variable FUENTE, dos puntos y la extención .c es decir se complementa el archivo .c, éste sería el archivo entrante y depués del signo igual tenemos .o, que vendría siendo el archivo objeto resultante. Con las dos últimas linea explicadas estaríamos haciendo lo siguiente: holamundo.c ruta/saludo.c holamudo.o saludo.o En otras palabras estamos particionando el compilado de todos los archivos .c. . Si lo hicieramos parte por parte sería: gcc holamundo.c ruta/saludo.o -o holamundo.o saludo.o Para ahorrarnos de escribir todo esto y para cada unos de los archivo que con- forma el proyecto holamundo, realizamos el makefile. Linea 10 : en ésta linea estamos creando la macro HEADER en la que se guarda el nombre del archivo header que se incluirá en los archivos holamundo.c y saludo.c Linea 11 : en ésta linea estamos creando otra macro llamada LIB, en la que se le está asignando la cadena util. En la compilación crearemos también librerías, en nuestro caso propias de nosotros. La librería se llamará util. Linea 12 : ésta linea guarda la ruta y el nombre del ejecutable final. Las siguientes lineas son como “métodos”, pero se llaman dependencias, es decir, están definidos para cuando el usuario al momento de compilar las necesite. De lado izquierdo de los : tenemos el objetivo y a la derecha están los prerrequisi- tos. Para la linea 14 el objetivo sería $(PROG) y los prerrequisitos $(OBJS), después de esta linea tenemos lo que realiza ésta dependencia, es decir, compilar. La linea 15 se traducería de la siguiente manera: gcc␣holamundo.c␣ruta_saludo/saludo.c␣-L␣ruta_lib␣-l␣nombre_lib␣-lm␣-o Lo que esta haciendo es compilar, con -L indica la ruta de la librería a crear, -l indica el nombre de la librearía, -lm indica que vamos a incluir una librearía matemática y -o para cambiar el nombre del archivo de salida. En la linea 16 se imprime un mensaje en consola, para indicar que a termi- nado de compilar. El “método” anterior se ejecuta automáticamente al invocar a MAKE. Los “métodos” LIMPIA y BORRA se invocan hasta que el usuario los invoque. 9
  • 10. La dependencia en la linea 26 -> .c.o también realiza algo similar a la linea 16, los asteriscos indican que todos los archivos que se encuentren en la ruta indicada con -I serán compilados y se obtendrá archivos objetos. Como podemos observar, los métodos sólo eliminan todos los archivos objetos y el ejecutable. La última linea no hace nada, simplemente “verifica la compilación”, checa que exista la ruta de los archivos que se van a incluir. NOTA: El archivo Makefile contiene una sintaxis, en el ejemplo se ve perfec- tamente. Para indicar las operaciones de cada macro se debe dar los espacios con tabuladores. Respetar los espacios que se observan, entre la definición de la macro o el objetivo, dos puntos y los prerrequisitos. Espero que hasta este punto ya tengas una idea de lo que es un archivo makefile y cual es su función. Ahora pasaremos a crear y llenar el archivo holamundo.c Este archivo contiene código C. No explicaré el codigo completamente, sólo en pocas palabras. Creamos el archivo: Tecleamos enter y presionamos la tecla i para impezar a teclear el código sigu- iente: 10
  • 11. Sólo mandamos a invocar los métodos en el método main. Para guardar los cambios tecleamos :w para guardar los cambios, si queremos salir del archivo tecleamos :q, si queremos guardar y salir a la vez tecleamos :wq. Ahora sigamos con el siguiente archivo, LEE.ME, éste archivo sólo contiene una pequeña descripción del módulo. 11
  • 12. Y guardamos y salimos del editor. El últimos archivo de éste módulo es compilar.sh. Dentro de él, tecleamos el siguiente código: 12
  • 13. Este es un archivo bash, nos permite ejecutar comandos en la terminal, con esto podemos automatizar operaciones. El comando pwd recoge o muestra la ubicación actual. El comando cd entra o se ubica en el directorio que se indica despues de un espacio. Podemos crear variables, las variables en un bash no se declaran, toman el valor que se les asigne. Con esto podemos entender el archivo bash. La última linea ejecuta el make, utilizando el makefile, como ya hemos visto, éste archivo es llamado automáti- camente al ejecutar make, el archivo bash le manda las variables que estaban sin crear en el makefile, como podemos observar, despues de la instrucción make tenemos la asignación de cada variable, y ese valor se le manda al makefile. De manera general sólo recoge la ubicación de los archivos necesarios y se los manda al makefile para compilar. 13
  • 14. Ya tenemos todos los archivos de ese modulo. Ahora ya tienes un poco de práctica para que puedas crear los módulos que hacen falta. Sólo te indicaré el código que irá en cada archivo y tu iras creando y llenando los archivos. La explicación es la misma, si entendiste lo anterior, entenderás lo que sigue. Dentro de la carpeta que se encuenta en holamundo/fuente/saludo esta vacia, crearemos los siguiente archivos: compilar.sh␣LEE.ME␣makefile␣saludo.c␣stub.c El archivo bash compilar.sh tendrá el siguiente código: El archivo LEE.ME tendrá: 14
  • 15. El archivo makefile tendrá: 15
  • 16. El archivo saludo.c tendrá: 16
  • 17. El archivo stub.c tendrá: 17
  • 18. Ya tenemos listo el modulo saludo. Ahora nos dirijimos a la carpeta lib que se encuentra en holamundo/fuente/lib y debemos crear los siguientes archivos: cadena.c␣compilar.sh␣LEE.ME␣makefile␣salir.c El archivo cadena.c tendrá: 18
  • 19. 19
  • 20. 20
  • 21. 21
  • 22. 22
  • 23. 23
  • 24. El archivo compilar.sh tendrá: El archivo LEE.ME tendrá: 24
  • 25. El archivo makefile tendrá: 25
  • 26. El archivo salir.c tendrá: 26
  • 27. 27
  • 28. 28
  • 29. 29
  • 30. Ahora nos dirijimos a la carpeta incl que se encuentra en holamundo/fuente/incl y debemos crear los siguientes archivos: cadena.h␣holamundo.h␣LEE.ME␣salir.h El archivo cadena.c tendrá: 30
  • 31. El archivo holamundo.h tendrá: 31
  • 32. El archivo LEE.ME tendrá: El archivo salir.h tendrá: 32
  • 33. Parece que ya tenemos todo lo necesario para hacer funcionar el proyecto hola- mundo. Tenemos cuatro carpetas dentro de la carpeta fuente, holamundo, incl, lib, y saludo, todos menos incl son módulos, la carpeta incl no tiene makefile, por lo tanto podemos compilar holamundo, lib y saludo. 33
  • 34. Compilación Para compilarlos haremos lo siguiente: Recordemos que hay un archivo bash que nos ayudará a compilar. Para ejecutar un archivo bash con extención .sh podemos hacerlo de varias maneras, dos de ellas son: sh␣compilar.sh ./compilar.sh Cualquiera de las dos funciona igual. Puede ser que el archivo no tenga permisos para ejecutarse, para darle permisos tecleamos: chmod␣+x␣compilar.sh y después volvemos a ejecutarlo con cualquiera de los dos comandos anteriores. OK. Nos dirijimos a holamundo/fuente/holamundo/ y ejecutamos para compi- lar el modulo holamundo. Ejecuta los comandos y muestra el mensaje de “Compilación terminada”, y hace- mos un ls para ver los archivo nuevos que se acaban de crear, hay un archivo nuevo llamado holamundo.c y en el directorio holamundo/bin/ hay un archivo ejecutable llamado holamundo, ya se a creado el ejecutable de ese modulo!. Si queremos ejecutar las macros BORRA o LIMPIA hacemos lo siguiente: En vez de teclear ./compilar.sh o sh compilar.sh teclearemos: make␣BORRA make␣LIMPIA Dependiendo de lo que queramos hacer, estos macros no se pueden ejecutar automáticamente, es por eso que se deben mandar a llamar. Si los hacemos se 34
  • 35. eliminarán todos los archivos que se hallan creado al compilar. Bueno, ahora nos dirijimos al directorio /holamundo/fuente/saludo/ para com- pilar el modulo saludo y hacemos lo mismo que lo anterior. Y ahora nos dirijimos a la ruta /holamundo/fuente/lib/ para compilar ese mod- ulo y se creen las librerias correspondientes. Hasta este momento en la ruta /holamundo/bin/ ya se encuentra dos archivo ejecutables. El modulo lib no creará ejecutables sino mas bien empaquetará las librerías usadas en los módu- los anteriores, en un archivo .a. Ejecuación El archivo que se crea se encuentra en /holamundo/lib/libutil.a 35
  • 36. Con esto ya hemos terminado la compilación de todos los módulos. Nos dirijimos a /holamundo/bin/ para ver los ejecutables y ver que mensajes nos muestran. ;-) En caso de que nos diga permiso denegado, le damos permiso con el comando visto anteriormente: chmod␣+x␣holamundo chmod␣+x␣saludo Bueno!, eso fue el proyecto de holamundo. 36
  • 37. Si tienes alguna duda mandar correo a: ivanthebest10@gmail.com o ivan_luisj@hotmail.com Puedes visitar mi blog: ivanovich-hacker.blogspot.mx Puedes distribuir libremente éste documento. Si deseas copiar y pegar parte del texto de éste documento debes dar los créditos correspondientes a Iván Luis Jiménez. Compilado el 19 de agosto de 2017 con LATEX usando LYX 37