He visto que make
es útil para proyectos grandes, especialmente con dependencias confusas descritas en a Makefile
, y también ayuda con el flujo de trabajo. No he escuchado ninguna ventaja de usar make
para proyectos pequeños. ¿Hay alguna?
scripting
compiling
make
development
Goodwin Lu
fuente
fuente
make
para descubrir la respuesta. crea una plantilla decente Makefile y simplemente edita la variable de sus archivos fuente. No es necesario escribir todo ese jazz.make
es un comando mucho más rápido para escribir que la mayoría de los demás, incluso si no crea un Makefile inteligente para manejar las dependencias de manera limpia :-)Respuestas:
¿A diferencia de qué?
Supongamos que tiene un programa que ha dividido en dos archivos, que ha llamado imaginativamente
file1.c
yfile2.c
. Puede compilar el programa ejecutandoPero esto requiere recompilar ambos archivos cada vez, incluso si solo uno ha cambiado. Puede descomponer los pasos de compilación en
y luego, cuando edite uno de los archivos, vuelva a compilar solo ese archivo (y realice el paso de vinculación sin importar lo que haya cambiado). Pero, ¿qué sucede si edita un archivo, y luego el otro, y olvida que editó ambos archivos y accidentalmente vuelve a compilar uno?
Además, incluso para solo dos archivos, tiene alrededor de 60 caracteres de comandos allí. Eso rápidamente se vuelve tedioso de escribir. OK, claro, puedes ponerlos en un script, pero luego vuelves a recompilar cada vez. O puede escribir un script realmente sofisticado y complicado que verifique qué archivo (s) se han modificado y solo haga las compilaciones necesarias. ¿Ves a dónde voy con esto?
fuente
gcc -O3 -march=native -fwhole-program *.c
está básicamente bien para un ciclo de edición / compilación / perfil. Pero aún desea un Makefile para que otras personas lo usen. Ser capaz de usar-fwhole-program
es una ventaja divertida de compilar todo junto, pero-flto
normalmente le da más o menos las mismas optimizaciones.Muchas otras personas están entrando en los detalles de los makefiles más complejos y mucha de la complejidad que conlleva. Normalmente uso makefiles por una razón completamente diferente:
No quiero recordar nada.
Incluso si tu proyecto es realmente aburrido y simple, y no usas makefiles "correctamente":
No necesito pensarlo o tratarlo de manera diferente a un proyecto que es más complejo:
O si especifiqué banderas (por ejemplo
-O2
), no necesito recordar cuáles eran.Además, si comienza con un archivo MAKE simple y necesita fusionar / refactorizar más tarde, no necesita recordar construir cada proyecto de manera diferente.
fuente
Incluso con proyectos pequeños, puede ser útil mantener la lógica de dependencia bajo control y las compilaciones automatizadas. También lo usé para activar instalaciones y desinstalaciones, por lo que fue un interruptor principal que restableció el escenario.
fuente
Si vincula su aplicación desde 2 fuentes (
.c
archivos), no necesita volver a compilar cada archivo, sino solo el modificado si está utilizando make.Además, te daré un ejemplo del mundo BSD. Tienen marco de Makefiles basados en el sistema. Le proporcionan rutas a los directorios del sistema y tienen objetivos para instalar su software y páginas de manual.
Por ejemplo, acabas de escribir la
beer.c
aplicación y el manual llamadobeer.6
. Tu creasMakefile
:..y llamar
make install
. Compila e instala automáticamente su aplicación/usr/bin
y compila e instala su página de manual en el lugar dondeman
puede encontrarla. ¡Acabas de instalar tu aplicación con un simple comando!Muy conveniente y absolutamente transparente para cualquiera que esté familiarizado con BSD. Mucho mejor que el script manual.
fuente
Ejemplo
Makefile
para mi proyecto muy pequeño:getPixelColor
Hace exactamente lo que dice su nombre, tomando dos argumentos opcionales, las coordenadas.
Me gusta especialmente la forma en que las cosas se vuelven dependientes allí.
Como puede ver, puede hacer todo lo que necesita, sin escribir nada adicional:
Uso
Puede ejecutarlo de esta manera:
Limpiar el viejo binario:
Compila un nuevo binario:
Ejecute el ejecutable de 2 maneras:
las coordenadas predeterminadas [0,0]
cualquier coordenada dada
Los Makefiles pueden ser extremadamente útiles a veces. Cuanto más grande es el proyecto, mayor es el beneficio. Pero incluso con eso, mi proyecto C ++ más pequeño, como puede ver en los ejemplos, le ahorra muchos dolores de cabeza.
fuente
make
está bastante confiablemente disponible. Si distribuye su proyecto con unmakefile
, los usuarios tendrán una referencia simple de cómo realizar tareas de la misma manera que usted. Elmakefile
puede ser para algo más que una compilación.Tome un proyecto que no requiere compilación, por ejemplo. Recuerdo haber trabajado en un proyecto de Python que tenía un comando make para borrar todos los
.pyc
archivos, un comando make para ejecutar las pruebas, uno para descargar una copia de los datos estáticos del servidor de desarrollo, etc.fuente