La última frase en el artículo me llamó la atención

[F]o desarrolladores C/C++ y
los estudiantes interesados en aprender a
programa en C/C++ en lugar de a los usuarios de
Linux. Esto es debido a que la compilación de
de código fuente simple en
GNU/Linux mediante el uso de la ‘hacer’
comando.

Siempre he usado gcc para compilar mis programas C/C++, mientras que javac para compilar mi los programas de Java. Sólo he utilizado hacer para instalar programas a mi pc por configure/make/make install.

Parece que se puede compilar al parecer todos sus programas con el comando make.

¿Cuál es la diferencia entre hacer y gcc?

  • Cabe señalar que javac consta de unos rudimentarios de la resolución de dependencia, es decir, es muy sencillo de hacer. Va a mirar recursivamente para (fuentes) de las clases que se utilizan por otras clases y compilación de las mismas cuando sea necesario, incluso si no fueron mencionadas como argumentos. Compiladores de C o enlazadores de no hacerlo, en parte porque la conexión entre el archivo de objeto resp biblioteca en un lado y las fuentes no se puede deducir la forma en que se puede en Java, donde físicas nombres de archivo y rutas corresponden a la lógica de los nombres de las clases y paquetes.

11 Comentarios

  1. 58

    Bien … gcc es un compilador, make es una herramienta para ayudar a crear programas. La diferencia es enorme. Nunca se puede construir un programa con simplemente hacer; no es un compilador. Lo que hacen no es introducir un archivo separado de las «reglas», que describe cómo ir desde el código fuente para el programa terminado. Se interpreta este archivo, las cifras de lo que necesita ser compilado, y las llamadas de gcc para usted. Esto es muy útil para proyectos más grandes, con cientos o miles de archivos de código fuente, y para seguir la pista de las cosas, como las opciones del compilador, incluyen caminos, y así sucesivamente.

    • Gracias por tu respuesta!
    • Hacer que ya no necesita un makefile para simple archivo de aplicaciones. Si usted tiene el archivo application.cpp luego make application va a construir.
    • Así que no hay diferencia entre el uso de hacer o de gcc para un solo archivo? Cuando yo uso gcc, tengo una .en el archivo, pero hacer que te da un archivo con el mismo nombre y sin extensión. ¿Cuál es la diferencia?
    • Nunca dijo que no había ninguna diferencia. Cuando se ejecuta make plop.cppse imprimen exactamente lo que está haciendo: g++ plop.cpp -o plop (acciones Reales variará dependiendo de su entorno como hacer tira de configuración de que así (por lo que su nunca va a ser la misma que la invocación de g++ directamente)). Usted no necesita un makefile para situaciones simples donde make probablemente va a hacer lo correcto. Pero en general creo que es bastante intuitivo de lo que está sucediendo, aunque.
  2. 13

    gcc compila y/o enlaces de un solo archivo. Soporta múltiples idiomas, pero no sabe cómo combinar varios archivos de código fuente en un no-trivial, un programa en ejecución – generalmente, usted necesitará por lo menos dos invocaciones de gcc (compilación y enlace) para crear incluso el más simple de los programas.

    Página de la Wikipedia sobre GCC describe como un «compilador del sistema»:

    El GNU Compiler Collection (generalmente abreviado GCC es un compilador del sistema producido por el Proyecto GNU que soporta diversos lenguajes de programación.

    hacer es una «herramienta de construcción» que invoca el compilador (que podría ser gcc) en una secuencia particular para compilar múltiples fuentes y vincular a ellos. También realiza un seguimiento de las dependencias entre varios archivos de código fuente y archivos objeto de que el resultado de la compilación de fuentes y no sólo de las operaciones en los componentes que han cambiado desde la última compilación.

    GNUmake es uno de los más populares de la implementación de hacer. La descripción de GNUmake es como sigue:

    Hacer es una herramienta que controla la generación de ejecutables y otros archivos de código fuente de un programa desde el código fuente del programa archivos.

    Hacer que obtiene su conocimiento de cómo construir su programa desde un archivo llamado makefile, que muestra cada uno de los no-archivos de origen y cómo se calcula a partir de otros archivos.

  3. 11

    gcc es un compilador de C: toma un archivo de código fuente de C y genera código máquina, ya sea en forma de desvincularse archivos objeto o como un verdadero programa ejecutable, que se ha vinculado a todos los módulos de objeto y bibliotecas.

    hacer es útil para controlar el proceso de generación de un proyecto. Un típico programa en C consta de varios módulos (.c) y los archivos de cabecera (.h). Sería tiempo para siempre compilar todo después de cambiar nada, así que está diseñada exclusivamente para compilar las partes que necesitan ser re-compilado después de un cambio.

    Esto se hace siguiendo las reglas creadas por el programador. Por ejemplo:

    foo.o: foo.c foo.h
        cc -c foo.c

    Esta regla dice que el archivo foo.o depende de los archivos de los foo.c y foo.h, y si alguno de ellos cambia, puede ser construido mediante la ejecución del comando en la segunda línea. (El de arriba no es real sintaxis: quiere hacer los comandos de sangría por una FICHA de personajes, que puedo hacer en este modo de edición. Imagine que está ahí, sin embargo.)

    hacer lecturas de sus reglas a partir de un archivo que se llama generalmente un archivo Makefile. Ya que estos archivos son (tradicionalmente), escrito por parte, tiene una gran cantidad de magia que permiten acortar las reglas. Por ejemplo, se sabe que un foo.o puede ser construido a partir de un foo.c, y se sabe cuál es el comando para hacerlo es. Por lo tanto, la regla anterior puede ser reducido a esto:

    foo.o: foo.h

    Un pequeño programa que consta de tres módulos podría tener un Makefile como este:

    mycmd: main.o foo.o bar.o
        $(CC) $(LDFLAGS) -o mycmd main.o foo.o bar.o
    foo.o: foo.h bar.h
    bar.o: bar.h

    hacer puede hacer más que sólo compilar programas. Un típico Makefile tendrá una regla para limpiar los archivos no deseados:

    clean:
        rm -f *.o core myapp

    Otra regla puede ejecutar las pruebas:

    check: myapp
        ./myapp < test.input > test.output
        diff -u test.correct test.output

    Un Makefile puede «construir» documentación: ejecutar una herramienta para convertir documentación de algunos de lenguaje de marcado HTML y PDF, por ejemplo.

    Un Makefile puede tener una instalación regla para copiar el binario del programa se construye a donde el usuario o el administrador del sistema desea instalado.

    Y así sucesivamente. Desde hacer es genérica y potente, que se utiliza normalmente para automatizar todo el proceso desde el desembalaje de un tarball fuente hasta el punto en el que el software está listo para ser utilizado por el usuario.

    Hay un montón de aprender acerca de hacer si quieres aprender de ello. La versión GNU de hacer es particularmente buena documentación: http://www.gnu.org/software/make/manual/ tiene en diversas formas.

    • Yo compararía a «hacer» y «gcc» con «git» y «ftp de transferencia» en la red tech.: git es como hacer (sólo la actualización de los archivos modificados si quieres, que es el caso de uso habitual) y gcc como ftp (lo cambia todo)
  4. 4

    Hacer es una herramienta para la construcción de cualquier sistema complejo donde existen dependencias entre los diferentes componentes del sistema, haciendo la mínima cantidad de trabajo necesario.

    Si quieres enterarte de todas las cosas que hacer puede ser utilizado para la GNU make manual es excelente.

  5. 4

    make utiliza un Makefile en el directorio actual para aplicar un conjunto de reglas a los argumentos de entrada. También conoce algunas reglas predeterminadas, por lo que se ejecuta incluso si no encuentra un Makefile (o similar) en el archivo en el directorio actual. La regla de ejecutar cpp archivos de lo que pasa a llamar gcc en muchos sistemas.

    Aviso de que no llame make con el de entrada nombres de archivo, sino más bien con nombres de la regla que reflejan la salida. Por lo que llamar a make xyz esforzaremos para ejecutar la regla xyz que por defecto genera un archivo xyz (por ejemplo basado en un archivo de código fuente xyz.cpp.

  6. 4

    hacer es esencialmente un sistema experto para la creación de código. Puede establecer las reglas de cómo se ha construido, y lo que ellos dependen. Hacer pueden observar las marcas de tiempo en todos los archivos y averiguar exactamente lo que necesita ser reconstruido en cualquier momento.

    gcc es la «gnu compiler collection». Hay muchos idiomas que admite (C, C++, Ada, etc dependiendo de su configuración), pero todavía es sólo una herramienta de las muchas que se pueden utilizar para construir su sistema.

  7. 3

    Puede utilizar make para compilar tus programas C y C++ llamando gcc o g++ en el archivo makefile para hacer toda la compilación y vinculación pasos, que permite realizar todos estos pasos con un simple comando. No es un reemplazo para el compilador.

  8. 3

    gcc es un compilador como javac. Te dan los archivos de origen, se le ofrece un programa.

    make es una herramienta de creación. Se necesita un archivo que describe cómo crear los archivos de su proyecto basado en dependencias entre los archivos, así que cuando usted cambia un archivo de código fuente, usted no tiene que reconstruir todo (como si se utiliza una secuencia de comandos de compilación). make generalmente se utiliza gcc realmente compilar archivos de origen.

    • Como dije en un comentario para el OP pregunta: javac es más que un compilador y realiza comprobaciones de dependencias basada en reglas (que son simples, debido a Java de la ruta o el nombre de frente de paquete/clase de correspondencia).
  9. 2

    ‘gcc’ es el compilador, el programa que en realidad se convierte el código fuente en un archivo ejecutable. Usted tiene que decir dónde el código fuente, lo que a la salida, y varias otras cosas, como las bibliotecas y las opciones.

    ‘hacer’ se parece más a un lenguaje de secuencias de comandos para compilar programas. Es una manera de ocultar todos los detalles de la compilación de su origen (todos los argumentos que usted tiene que pasar el compilador). La secuencia de comandos todos los datos mencionados, una vez en el archivo Makefile, así que usted no tiene que escribir cada vez para cada archivo. También se hacen cosas interesantes como sólo recompilar los archivos de origen que se han actualizado, y manejar las dependencias (si se me vuelva a compilar este archivo, a continuación, voy a necesidad de volver a compilar el archivo.)

Dejar respuesta

Please enter your comment!
Please enter your name here