Mientras estoy desarrollando en C/C++ y Java, simplemente hago un script compile.bat que hace todo, eso está bien para mí. ¿Por qué debería usar make y por qué debería usar hormiga?¿Cuál es la utilidad real de la marca y la hormiga?
Respuesta
Supongamos que tiene 1000 archivos fuente y cambia solo uno de ellos. Con su script .bat tendrá que volver a compilar el lote, con lo cual deberá recompilar solo el que cambió. Esto puede ahorrar bastante (leer horas en un gran proyecto) de tiempo.
Mejor aún, si cambia uno de sus archivos de encabezado, make volverá a compilar solo los archivos de origen que usan ese encabezado.
Estas son las dos características principales que han significado make y sus descendientes se utilizan para todo el desarrollo de software serio con lenguajes compilados.
Diablos, incluso en un proyecto de un solo hombre no es difícil llegar a múltiples compilaciones de limpieza en una máquina rápida. – dmckee
También existe la posibilidad de admitir la construcción de múltiples versiones (depuración, lanzamiento, plataforma específica), automatizar pruebas, instalación, etc. Sí, puede hacer todo eso al hacer sus propias secuencias de comandos, pero ¿por qué inventar la rueda otra vez? –
Y si las dependencias de su archivo MAKE son precisas, puede hacer una compilación paralela simplemente escribiendo 'make -j N' donde' N' es la cantidad de trabajos que desea ejecutar a la vez: gran aceleración en una CPU multi-core. – Dan
Por un lado, make y horm guardan los archivos que ya se han compilado, por lo que no se rehace el trabajo si no es necesario.
Con un archivo de compilación, puede automatizar algo más que la compilación de su código; puede ejecutar pruebas unitarias, recopilar métricas, artefactos de compilación de paquetes para implementación y más.
Una ventaja, de las clases, de Ant es que inspiró herramientas para otras plataformas: NAnt para .NET, Phing para PHP. Hacen las mismas cosas, y trabajan de la misma manera.
Siempre y cuando se desarrolle en Windows: se ajuste a usted mismo.
Pero si comienza a desarrollar con otros Ant and Make son un estándar para describir cómo se construye su aplicación.
+1: un archivo .bat funcionará * solo * en Windows, un archivo '.sh' funcionará * solo * en Unix (sí, lo sé ...). Un archivo Ant 'build.xml' funcionará en todas partes donde pueda ejecutar Ant. –
@JoachimSauer ANT construye solo trabajo donde ANT ha sido instalado, al igual que los scripts SH requieren una instalación de sh, así que no estoy convencido de que Ant esté "en todas partes" de una manera que "sh" no lo es. – davenpcj
Puede haber varias razones: - porque usted no es el único en el proyecto - porque alguien tendrá que preocuparse por el script de construcción cuando se fue - debido a un guión compile.bat no es independiente de la plataforma - porque la política del proyecto define la tecnología de construcción, por ejemplo para toda la empresa
Hace poco leí un divertido article about build tools. Para usted, solo la primera parte puede ser de su interés (antes de que comience el ataque de maven)
Obtiene cierta neutralidad de plataforma (¿cómo puedo ejecutar su script por lotes en mi linux-box)? Pero más importante: las herramientas de compilación tienen soporte para la resolución de dependencia. Las secuencias de comandos carecen de esto y tienen que construirlo por sí mismas.
Digamos que tiene los objetivos A, B y C. B y C ambos dependen de A. En un script llaman a la subrutina A. Si ahora crea un nuevo objetivo D, eso depende de B y C, de lo que lo hará ejecuta A dos veces. Las herramientas de compilación lo reconocen y ejecutan A solo una vez.
Debido a que esta situación es típica para la tarea de compilar, crear una distribución, probar, crear documentación, etc. las herramientas de compilación son útiles para el desarrollo de software.
Sería posible usar un archivo .bat, o bash u otro sabor de script de shell, para hacer todo lo que Ant puede hacer, creo. Pero es mucho más fácil hacer muchas cosas en Ant ...
- crear/mover/borrar archivos y directorios
- solicitar fichas de filtro
- unidad de ejecución a prueba
- paquete de un frasco, código postal, o la guerra adecuadamente
Muchos proyectos tienen que hacer estos cosas, además de compilar, cuando construyen.
También Ant es independiente de la plataforma, por lo que puede colaborar con quienes utilizan otros sistemas operativos.
¿Pero por qué detenerse en Ant? Apache Maven ofrece características aún más atractivas.
Make y Ant realmente entran en su propio cuando se utilizan con sistemas de construcción automatizados o integración continua.
Los requisitos para las compilaciones de producción, compilaciones de prueba y compilaciones de desarrollo son a menudo diferentes, y en un equipo multipersona, diferentes desarrolladores configuran sus entornos de desarrollo de diferentes maneras.
Tener un proceso de creación definitivo resuelve los problemas de "Works on My Machine" (WOMM) que surgen cuando la aplicación necesita construirse en una máquina diferente a la que se desarrolló. Es el último árbitro cuando un desarrollador comprueba el código que no funciona en la máquina de otro desarrollador. Si el proceso de compilación no produce un software en funcionamiento, el primer control del desarrollador se interrumpió. Si produce software en funcionamiento, el entorno de desarrollo del segundo desarrollador se rompe, a menos que se demuestre lo contrario.
- 1. ¿Cuál es la utilidad de `enable_shared_from_this`?
- 2. ¿Cuál es la utilidad de los tipos NMTOKEN y NMTOKENS?
- 3. ¿Cuál es la diferencia real entre MVC y MVC Modelo2
- 4. ¿Cuál es la utilidad del tipo de matriz?
- 5. ¿Cuál es la utilidad del atributo GeneratedCodeAttribute en C#?
- 6. ¿Cuál es la fórmula para calcular una marca de tiempo?
- 7. ¿Qué es hiedra? y cómo se relaciona con la hormiga?
- 8. ¿Cuál es el significado real de la separación del contenido y la presentación?
- 9. ¿Cuál es la causa real del error de mysql 1442?
- 10. ¿cuál es el uso real de la interfaz en java?
- 11. ¿Cuál es el significado real de la palabra clave "this"?
- 12. ¿Cuál es la JVM en tiempo real (RTSJ) más preferida?
- 13. Data_wrap_struct y marca la función
- 14. ¿Cuál es la mejor manera de realizar la comparación de marca de tiempo en Bash
- 15. ¿Es posible la paridad de marca y espacio con boost.asio?
- 16. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 17. Utilidad de la señalización NaN?
- 18. Cuál es la diferencia entre $ y jQuery
- 19. ¿Cuál es la diferencia entre wmain y main?
- 20. Cuál es la diferencia entre la función() {}() y la función() {}()
- 21. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 22. ¿Cuál es la diferencia real entre la propiedad Reciclaje/Estándar de VirtualizationMode en VirtualizingStackPanel?
- 23. dinámicamente concatenación de archivos XML y XSLT con la hormiga
- 24. ¿Cuál es la forma correcta de agregar un módulo de utilidad a una distribución de CPAN?
- 25. Utilidad de System.Diagnostics.Contracts en la pregunta
- 26. ¿Cuál es la diferencia entre ";" y "IR" en T-SQL?
- 27. ¿Cuál es la diferencia entre __stdcall y _stdcal?
- 28. ¿Cuál es la utilidad de los bloques CHECK, UNITCHECK e INIT en Perl?
- 29. Javassist. ¿Cuál es la idea principal y dónde el uso real?
- 30. ¿Cuál es la diferencia real entre Base SDK y Deployment Target o Deployment OS Version?
multiplataforma, etc. –
¿por qué la palabra real? implica que hay una "supuesta" utilidad, pero no se dice cuál. Supongo que solo preguntas cuál es la utilidad. – Dan
Si tienes que preguntar cuál es el punto de usar make o horm, no estás listo para entender la diferencia entre ellos. :-) – JesperE