Zhivago
Compile el siguiente programa
#include <stdio.h>
int main(void)
{
printf ("Hello from your first program!\n");
return 0;
}
a)-mediante el uso de un archivo de tipo Makefile
b)-el ejecutable se llamará Hello
“Por favor, ayuda para hacer un ejercicio. Sé cómo hacerlo en CodeBlocks, pero no sé qué es Makefile y cómo escribirlo en Linux. Lo compilé usando el comando “gcc filename.c” y luego “./ a.out” pero todavía no entiendo qué es el Makefile. ¿Es una especie de script de shell, una instrucción? ¿Cómo se vería exactamente un Makefile para esta tarea? Gracias de antemano 🙂 “
Jayesh Bhoi
Este es su archivo de creación simple para el programa hola.
CC = gcc
CFLAGS = -g
RM = rm -f
default: all
all: Hello
Hello: Hello.c
$(CC) $(CFLAGS) -o Hello Hello.c
clean veryclean:
$(RM) Hello
Supongamos que tienes dos makefiles
en un directorio llamado makefile.m1
y makefile.m2
y si desea compilar ambos archivos, use los siguientes comandos
make -f makefile.m1
make -f makefile.m2
o usar solo Makefile
eso contiene:
m1:
make -f makefile.m1
m2:
make -f makefile.m2
y use make m1
o make m2
Ahora aclaremos su duda sobre el nombre del archivo make no debe requerir Makefile
Puedes nombrar el makefile como quieras. supongo que me gustaría dar nombre myfirstmakefile.mk
. Para usarlo más tarde, debe indicar qué makefile desea. Use la opción -f para esto:
make -f myfirstmakefile.mk
Y de nuevo extensión .mk
tampoco es obligatorio, puedes usar lo que quieras, pero nunca te olvidaste de usar -f
opción.
así que puede que esta ayuda tenga sentido para usted.
-
Muchas gracias. ? ¿Con qué comando de Unix Shell comenzaste? ¿Ingresó primero en nano Hello.c (escribió el programa Hello world y escribió nano Hello.makefile, o cuáles fueron sus pasos desde el principio?
– Zhivago
4 de febrero de 2014 a las 11:05
-
Escribí eso en un archivo llamado
mkmk
usando nano y cuando escribímake mkmk
dice 1make: no hay nada que hacer por defecto, pero por qué– Zhivago
4 de febrero de 2014 a las 11:08
-
No, en Linux simplemente copie el código anterior en un nuevo archivo llamado
Makefile
y también hacerHello.c
programa en el mismo directorio donde arribaMakefile
pusiste. Ahora, desde la terminal, ve a ese directorio y simplemente escribemake
para construirHello.c
ymake clean
para limpiar la salida.– Jayesh Bhoi
4 de febrero de 2014 a las 11:10
-
He observado que si nombra un archivo MAKE que no sea “Makefile”, no funciona, ¿qué sucede si necesita crear dos archivos MAKE?
– Zhivago
6 de febrero de 2014 a las 21:07
-
No… no es obligatorio dar un nombre de archivo make como
Makefile
puede dar lo que quiera … déjeme explicarle las reglas de makefile con más detalles … vea mi respuesta actualizada.– Jayesh Bhoi
7 de febrero de 2014 a las 4:20
Jens
A archivo MAKE es una receta para el make
utilidad cómo crear un archivo (llamado objetivo) de algunos otros archivos (llamados dependencias) usando un conjunto de comandos ejecutados por el shell. Un archivo MAKE normalmente se ve así:
target: dependency [...]
command1
command2
intenta correr man make
para detalles.
Ahora para su tarea, realmente no hay necesidad de un Makefile, ya que make
tiene reglas integradas que saben cómo compilar un programa simple. Todo lo que necesita hacer es colocar su fuente C en un archivo con el nombre del ejecutable (Hello
) y con un .c
extensión, es decir Hello.c
.
Entonces un sencillo
$ make Hello
cc Hello.c -o Hello
hace todo Si desea utilizar gcc en lugar de cc, puede ejecutar
$ rm Hello
$ make CC=gcc Hello
gcc Hello.c -o Hello
Si le dice a su instructor/maestro/profesor que todo lo que necesita es un archivo MAKE vacío, ya que sabe que las reglas integradas hacen lo correcto, obtendrá algo de crédito adicional y tal vez su instructor haya aprendido algo nuevo 🙂 Si se le pide una referencia, puede citar las partes relevantes del manual de fabricación o, hágalo como un profesional, citar del Estándar POSIX para la utilidad makesección Reglas predeterminadas.
-
Muchas gracias. Sólo para asegurarme de que lo hice bien. Primero creé un Hello.c usando nano y mi código fuente, luego lo guardé y salí, y escribí (
make Hello
) en la consola de terminal (de Linux/Unix) y obtuve (cc Hello.c -o Hello
) bajo mi comando. Así que supongo que cc(es para compilar c) y (-o es algo si la vinculación pone la salida ejecutable en la salida del archivo, pero ¿qué significa realmente en palabras ordinarias? (compila Hello.c y da una salida vacía de la ¿Instrucciones de Makefile por defecto?) Pero luego ejecuto el mismo comando (make Hello
) y dio (make:
Hola’ está actualizado.`)– Zhivago
04/02/2014 a las 11:00
-
make
compila tuHello.c
archivo y cree binario según su nombre de archivo. Si vuelve a darmake
entonces buscará cambios en suHello.c
si no se encuentra el archivo, simplemente envíeloHello is upto date
– Jayesh Bhoi
4 de febrero de 2014 a las 11:22
-
@Zhivago Cuando ejecuta make por segunda vez, verifica si la dependencia es más joven que el objetivo. Si es así, ejecuta los comandos. Si no, no hay nada que hacer y make dice ‘Hola está actualizado’. Es lo suficientemente inteligente como para saber que si Hello.c no cambió, no hay necesidad de compilarlo. Ese es el objetivo de make: hacer el trabajo mínimo necesario para actualizar un objetivo. Si usted
touch Hello.c
orm Hello
volverá a compilar.– Jens
4 de febrero de 2014 a las 11:59
-
@Zhivago El
-o file
opción al compilador nombra el archivo de resultados (que por defecto esa.out
. Sí,cc
es el nombre tradicional del compilador de Unix C, que en Linux es idéntico agcc
.– Jens
4 de febrero de 2014 a las 12:03
-
@Jens ¿Podría decirme qué hizo cuando escribió $ make CC=gcc Hola, estableció un argumento o una variable?
– Zhivago
19/09/2014 a las 14:34
antes de optar por makefile, debe saber qué es y por qué lo necesitamos
¿Qué es Makefile?
Makefile es un script escrito en una cierta sintaxis prescrita que ayuda a construir la salida de destino (normalmente, uno o más ejecutables) a partir de archivos de origen mediante la compilación y la vinculación. En palabras simples, makefile compilará su código fuente de manera simple y rápida. ¿Por qué necesitamos Makefile?
=> Los proyectos grandes pueden contener varios archivos fuente que dependen entre sí o están organizados de manera jerárquica, por ejemplo, para compilar el archivo A, primero debe compilar B; para compilar B, primero debe compilar C; y así.
=> Make es una solución a estos problemas. Se puede usar para compilar todo el proyecto de una manera bien organizada y generar su objetivo de acuerdo con su regla de creación (que discutiremos más adelante) ingresando el comando único que es hacer.
=> Una característica importante es que cuando un proyecto se vuelve a compilar después de algunos cambios, volverá a compilar solo los archivos que se cambiaron y cualquier otro archivo que dependa de él. Esto ahorra mucho tiempo.
=> Para un proyecto grande, cuando se realizan algunos cambios en la fuente, volver a compilar manualmente todo el proyecto cada vez es tedioso, propenso a errores y requiere mucho tiempo.
Aquí hay un buen enlace para ello:Cómo escribir el primer archivo MAKE
Un archivo MAKE es una receta para computadoras con instrucciones sobre cómo realizar ciertas tareas y con dependencias entre esas tareas.
En la forma simple, se ve así:
a.out: filename.c
gcc filename.c
Leer: “Para construir a.out
de filename.c
ejecute el comando gcc filename.c
. Si a.out
es más nuevo que filename.c
entonces no hagas nada”
Nota: El primer carácter en el gcc
línea debe ser una ficha.
¿Has probado a buscar en Google Tutorial de archivo MAKE?
– RojoX
4 de febrero de 2014 a las 9:31
Has probado Tutorial de CMake?
– yegorich
4 de febrero de 2014 a las 10:27
Por alguna razón, los programadores de bajo nivel SÍ participan en StackOverflow, pero piensan que no es el lugar adecuado para proporcionar buenas respuestas y enseñar a los que no saben, solo para ser cínicos y proporcionar enlaces o sugerir leer las páginas man ¯_(ツ)_/¯
–Rafael Eyng
19 de octubre de 2017 a las 0:49