¿Cómo puedo compilar y ejecutar código C/C++ en una consola Unix/terminal Mac?

1 minuto de lectura

avatar de usuario
Pensilvania

¿Cómo puedo compilar/ejecutar código C o C++ en una consola Unix o una terminal Mac?

avatar de usuario
Camh

Si es un programa simple de fuente única,

make foo

donde esta el archivo fuente foo.c, foo.cpp, etc., ni siquiera necesita un archivo MAKE. Make tiene suficientes reglas integradas para construir su archivo fuente en un ejecutable del mismo nombre, menos la extensión.

Ejecutar el ejecutable que se acaba de crear es lo mismo que ejecutar cualquier programa, pero la mayoría de las veces necesitará especificar la ruta al ejecutable ya que el shell solo buscará lo que está en $PATH para encontrar ejecutables, y la mayoría de las veces eso no incluye el directorio actual (.).

Entonces, para ejecutar el ejecutable construido foo:

./foo

  • No me di cuenta de las reglas integradas que se propagan a los objetivos especificados al invocar make. Aprendí algo nuevo hoy =)

    – Branán

    21 de octubre de 2008 a las 17:04

  • “-bash: make: comando no encontrado” <-- Debe tener la herramienta de desarrollo y los componentes adicionales descargados.

    – dmgig

    30 de abril de 2014 a las 15:20

  • Que no es make main.cpppero make main.

    –Craig McMahon

    5 de enero de 2015 a las 15:51

  • ¿Qué hace ./ en ./foo?

    – Fabián Amran

    9 de julio de 2021 a las 2:54

  • @FabianAmran Se refiere al directorio actual. El shell buscará solo en los directorios enumerados en el $PATH variable de entorno para que los programas se ejecuten a menos que se especifique una ruta al ejecutar el programa. . (directorio actual) a menudo no está en $PATH por razones de seguridad.

    – camh

    9 de julio de 2021 a las 5:54

avatar de usuario
Andrey Neverov

gcc main.cpp -o main.out
./main.out

  • como novato tuve mucho dolor por no incluir el “./” al ejecutar

    – funk-shun

    26 de enero de 2011 a las 6:00


  • Usé “gcc main.cpp -o main.out”, y obtuve este error, Símbolos indefinidos para la arquitectura x86_64: “std::__1::locale::use_facet(std::__1::locale::id&) const” , … resulta que el motivo es que los enlaces predeterminados de gcc son libc. mientras usa g ++ se vinculará con libstdc ++. Así que usar “g++ main.cpp -o main.out” puede ser mejor.

    – Raquel

    28 de julio de 2015 a las 3:18


  • Sobre Undefined symbols for architecture x86_64 problema, modifico el comando de la siguiente manera: gcc -lstdc++ main.cpp -o main.out, y eso funciona en mi Mac. a través del enlace: stackoverflow.com/questions/11852568/…

    – rotoava

    6 de marzo de 2018 a las 9:08

avatar de usuario
Komengem

Este es el comando que funciona en todas las máquinas Unix… Lo uso en Linux/Ubuntu, pero también funciona en OS X. Escriba el siguiente comando en Terminal.app.

g++ -o lab21 iterative.cpp

-o es la letra O, no cero

lab21 será su archivo ejecutable

iterative.cpp es su archivo C++

Después de ejecutar ese comando, escriba lo siguiente en la terminal para ejecutar su programa:

./lab21

avatar de usuario
Víctor Augusto

Dos pasos para mí:

Primero:

make foo

Luego:

./foo

avatar de usuario
orj

Toda la ejecución de aplicaciones en un entorno Unix (Linux, Mac OS X, AIX, etc.) depende de la ruta de búsqueda del ejecutable.

Puede mostrar esta ruta en la terminal con este comando:

echo $RUTA

En Mac OS X (de forma predeterminada), esto mostrará la siguiente ruta de búsqueda separada por dos puntos:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Por lo tanto, cualquier ejecutable en los directorios enumerados puede ejecutarse simplemente escribiendo su nombre. Por ejemplo:

gato miarchivotexto.txt

esto corre /bin/cat y muestra mytextfile.txt en la terminal.

Para ejecutar cualquier otro comando que no esté en la ruta de búsqueda del ejecutable, es necesario que califique la ruta al ejecutable. Entonces, supongamos que tenía un ejecutable llamado MyProgram en mi directorio de inicio en Mac OS XI, puedo calificarlo completamente así:

/Usuarios/oliver/MiPrograma

Si se encuentra en una ubicación cercana al programa que desea ejecutar, puede calificar el nombre con una ruta parcial. Por ejemplo, si MyProgram estaba en el directorio /Users/oliver/MyProject Yo y yo estaba en mi directorio de inicio. Puedo calificar el nombre del ejecutable de esta manera y hacer que se ejecute:

MiProyecto/MiPrograma

O decir que estaba en el directorio /Users/oliver/MyProject2 y quise ejecutar /Users/oliver/MyProject/MyProgram Puedo usar una ruta relativa como esta, para ejecutarla:

../MiProyecto/MiPrograma

Del mismo modo, si estoy en el mismo directorio que MyProgram Necesito usar una ruta relativa de “directorio actual”. El directorio actual en el que se encuentra es el carácter de punto seguido de una barra inclinada. Por ejemplo:

./Mi programa

Para determinar en qué directorio se encuentra actualmente, utilice el pwd mando.

Si normalmente coloca programas en un lugar de su disco duro que desea ejecutar sin tener que calificar sus nombres. Por ejemplo, si tiene un directorio “bin” en su directorio de inicio para los scripts de shell de uso regular de otros programas, puede ser conveniente modificar la ruta de búsqueda de ejecutables.

Esto se puede hacer fácilmente creando o editando el archivo existente. .bash_profile archivo en su directorio de inicio y agregando las líneas:

#!/bin/sh
export PATH=$PATH:~/bin

Aquí, el carácter de tilde (~) se utiliza como acceso directo para /Users/oliver. También tenga en cuenta que la línea hash bang (#!) debe ser la primera línea del archivo (si aún no existe). Tenga en cuenta también que esta técnica requiere que su shell de inicio de sesión sea bash (el predeterminado en Mac OS X y la mayoría de las distribuciones de Linux). También tenga en cuenta que si desea que sus programas se instalen en ~/bin para usarse con preferencia a los ejecutables del sistema, debe reordenar la declaración de exportación de la siguiente manera:

export PATH=~/bin:$PATH

  • parece una gran idea EDITAR: nvm yo siendo irónico. simplemente todas las cosas de $PATH me recuerdan a las “variables de entorno” de Windows con las que se supone que no debes jugar demasiado

    – cmarangu

    29 de enero de 2021 a las 2:22


  • desenredado: “Parece una gran idea. EDITAR: no importa, era irónico. Todo el material de $PATH me recuerda a las “variables de entorno” de Windows con las que se supone que no debes jugar demasiado”.

    -Peter Mortensen

    19 de febrero a las 11:27

avatar de usuario
Pedro Mortensen

Haz todo esto en “Terminal”.

Para usar el compilador G++, debe hacer esto:

  1. Navegue hasta el directorio en el que almacenó el archivo *.cpp.

    cd ~/programs/myprograms/

    (el ~ es un atajo para su hogar, es decir, /Users/Ryan/programs/myprograms/, reemplácelo con la ubicación que realmente usó).

  2. compilarlo

    g++ input.cpp -o output.bin (salida.bin puede ser cualquier cosa con cualquier extensión, de verdad. La extensión .bin es común en Unix).

    Debería haber nada devuelto si tuvo éxito, y eso es bueno. Por lo general, se obtienen beneficios de los fracasos.

    Sin embargo, si escribe ls, verá la lista de archivos en el mismo directorio. Por ejemplo, vería las otras carpetas, entrada.cpp y salida.bin

  3. Desde dentro del directorio, ahora ejecútelo con ./outbut.bin

  • parece una gran idea EDITAR: nvm yo siendo irónico. simplemente todas las cosas de $PATH me recuerdan a las “variables de entorno” de Windows con las que se supone que no debes jugar demasiado

    – cmarangu

    29 de enero de 2021 a las 2:22


  • desenredado: “Parece una gran idea. EDITAR: no importa, era irónico. Todo el material de $PATH me recuerda a las “variables de entorno” de Windows con las que se supone que no debes jugar demasiado”.

    -Peter Mortensen

    19 de febrero a las 11:27

avatar de usuario
Pedro Mortensen

Una forma compacta de hacerlo podría ser:

make foo && ./$_

Es bueno tener una sola línea para que pueda volver a ejecutar su ejecutable fácilmente.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad