Intenté hacer esto lo más simple posible omitiendo variables como $ (CC) y $ (CFLAGS) que generalmente se ven en los archivos MAKE. Si estás interesado en resolver eso, espero haberte dado un buen comienzo.
Aquí está el Makefile que me gusta usar para la fuente C. Sientase libre de usarlo:
Utiliza las características comodín y patsubst de la utilidad make para incluir automáticamente archivos .c y .h en el directorio actual, lo que significa que cuando agrega nuevos archivos de código a su directorio, no tendrá que actualizar el Makefile. Sin embargo, si desea cambiar el nombre del ejecutable generado, las bibliotecas o los indicadores del compilador, puede modificar las variables.
En cualquier caso, no use autoconf, por favor. ¡Te lo ruego! :)
Para ser técnicamente correcto, creo que deberías usarlo .PHONY: clean all defaultpara esos objetivos que están destinados a ser usados desde la línea de comando. Además, Autoconf / Automake no son tan malos. Claro, se sienten horribles, y acostumbrarse a ellos es tan divertido como forzar la cabeza a través de una pared de ladrillos, pero funcionan, y están bien desarrollados, y cubrirán la mayoría de sus bases en cuanto a portabilidad, y hará que tu vida sea mucho más fácil al final una vez que te acostumbres a su horrible diseño.
Chris Lutz
Supongo que esto funciona, pero pensé que si escribía "make" en el terminal, el programa debería ejecutarse. Esto es lo que obtengo: gcc statsh.o -Wall -lm -o prog ¿Es posible escribir make y ejecutar el programa?
Por ejemplo, este simple Makefile debería ser suficiente:
CC = gcc
CFLAGS = -Wall
todos: programa
programa: programa.o
program.o: program.c program.h headers.h
limpiar:
rm -f program program.o
ejecute el programa
./programa
Tenga en cuenta que debe haber <tab>en la siguiente línea después de limpiar y ejecutar, no espacios.
ACTUALIZACIÓN Comentarios a continuación aplicados
@ user69514: makesin argumentos, generalmente solo construye su software. Para ejecutarlo, use make run(disponible en esta respuesta, pero no necesariamente en todas Makefile), o ejecútelo directamente:./program
puedes agregar más detalles para explicar lo que hace tu Makefile
Federico
2
en realidad puedes ser mucho más simple. ver @anonymous 1 liner
Mark Lakata
0
Dependiendo de la cantidad de encabezados y sus hábitos de desarrollo, es posible que desee investigar gccmakedep. Este programa examina su directorio actual y agrega al final del archivo MAKE las dependencias de encabezado para cada archivo .c / cpp. Esto es excesivo cuando tienes 2 encabezados y un archivo de programa. Sin embargo, si tiene más de 5 pequeños programas de prueba y está editando uno de los 10 encabezados, puede confiar en make para reconstruir exactamente aquellos programas que fueron modificados por sus modificaciones.
Respuestas:
Interesante, no sabía que make usaría de manera predeterminada las reglas dadas del compilador de C con respecto a los archivos fuente.
De todos modos, una solución simple que demuestra conceptos simples de Makefile sería:
(tenga en cuenta que make requiere una pestaña en lugar de una sangría de espacio, así que asegúrese de arreglar eso al copiar)
Sin embargo, para admitir más archivos C, tendría que crear nuevas reglas para cada uno de ellos. Por lo tanto, para mejorar:
Intenté hacer esto lo más simple posible omitiendo variables como $ (CC) y $ (CFLAGS) que generalmente se ven en los archivos MAKE. Si estás interesado en resolver eso, espero haberte dado un buen comienzo.
Aquí está el Makefile que me gusta usar para la fuente C. Sientase libre de usarlo:
Utiliza las características comodín y patsubst de la utilidad make para incluir automáticamente archivos .c y .h en el directorio actual, lo que significa que cuando agrega nuevos archivos de código a su directorio, no tendrá que actualizar el Makefile. Sin embargo, si desea cambiar el nombre del ejecutable generado, las bibliotecas o los indicadores del compilador, puede modificar las variables.
En cualquier caso, no use autoconf, por favor. ¡Te lo ruego! :)
fuente
.PHONY: clean all default
para esos objetivos que están destinados a ser usados desde la línea de comando. Además, Autoconf / Automake no son tan malos. Claro, se sienten horribles, y acostumbrarse a ellos es tan divertido como forzar la cabeza a través de una pared de ladrillos, pero funcionan, y están bien desarrollados, y cubrirán la mayoría de sus bases en cuanto a portabilidad, y hará que tu vida sea mucho más fácil al final una vez que te acostumbres a su horrible diseño.rm
: stackoverflow.com/questions/2989465/rm-rf-versus-rm-rfPor ejemplo, este simple Makefile debería ser suficiente:
Tenga en cuenta que debe haber
<tab>
en la siguiente línea después de limpiar y ejecutar, no espacios.ACTUALIZACIÓN Comentarios a continuación aplicados
fuente
make
sin argumentos, generalmente solo construye su software. Para ejecutarlo, usemake run
(disponible en esta respuesta, pero no necesariamente en todasMakefile
), o ejecútelo directamente:./program
es suficiente. el resto es implícito
fuente
.c
archivo, soloprogram:
es necesario. Dulce :)El archivo de creación más simple puede ser
fuente
Dependiendo de la cantidad de encabezados y sus hábitos de desarrollo, es posible que desee investigar gccmakedep. Este programa examina su directorio actual y agrega al final del archivo MAKE las dependencias de encabezado para cada archivo .c / cpp. Esto es excesivo cuando tienes 2 encabezados y un archivo de programa. Sin embargo, si tiene más de 5 pequeños programas de prueba y está editando uno de los 10 encabezados, puede confiar en make para reconstruir exactamente aquellos programas que fueron modificados por sus modificaciones.
fuente