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

143

¿Cómo puedo compilar / ejecutar C o C ++ en la consola Unix o en un terminal Mac?

(Lo sé, olvídalo y vuelve a aprenderlo. Es hora de escribirlo).

Pensilvania
fuente

Respuestas:

188

Si es un programa simple de fuente única:

make foo

donde el archivo fuente es foo.c o foo.cpp, etc.

Ni siquiera necesitas un makefile. Make tiene suficientes reglas integradas para construir su archivo fuente en un ejecutable del mismo nombre, menos la extensión.

Ejecutar el ejecutable recién creado es lo mismo que ejecutar cualquier programa, pero lo más frecuente es que necesites especificar la ruta al ejecutable ya que el shell solo buscará lo que hay $PATHpara encontrar ejecutables, y la mayoría de las veces eso no incluye el directorio actual (. )

Entonces, para ejecutar el ejecutable construido foo:

./foo
camh
fuente
No me di cuenta de que las reglas incorporadas se propagaban a los objetivos especificados al invocar make. Aprendí algo nuevo hoy =)
Branan
"-bash: make: comando no encontrado" <- Debe descargar la herramienta de desarrollador y los componentes adicionales.
dgig
17
No lo es make main.cpp, pero make main.
Craig McMahon
@ CraigMcMahon ¡Gracias por tu aporte!
Hlawuleka MAS
Aprendí algo nuevo, ¡esto es genial!
FossilizedCarlos
112
gcc main.cpp -o main.out  
./main.out
Andrey Neverov
fuente
31
Como novato, tuve tanto dolor por no incluir el "./" cuando ejecuté
funk-shun
2
@ funk-shun Desearía que tu comentario fuera el mejor resultado al buscar en Google este tipo de cosas. Me llevó una eternidad descubrirlo (para mi Mac). ¡Gracias!
Cory
10
Usé "gcc main.cpp -o main.out", y obtengo este error, Símbolos indefinidos para arquitectura x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... resulta que la razón es que gcc default-links es libc. mientras usa g ++ se vinculará con libstdc ++. Por lo tanto, usar "g ++ main.cpp -o main.out" puede ser mejor.
Rachel
1
@ Rachel También experimenté el mismo problema.
Goldname
1
Sobre el Undefined symbols for architecture x86_64 problema, modifico el comando de la siguiente manera: gcc -lstdc++ main.cpp -o main.outy eso funciona en mi Mac. a través del enlace: stackoverflow.com/questions/11852568/…
rotoava
69

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á tu archivo ejecutable

iterative.cpp es tu archivo c ++

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

$ ./lab21
Komengem
fuente
1
Esto es lo que funcionó para mí. Probé las otras soluciones anteriores sin suerte. ¡Gracias!
nmrichards
funcionó para mí también, no es necesario instalar nada, la solución perfecta.
Chander Shakher Ghorela - Guru
33

Dos pasos para mi:

primero:

make foo

luego:

./foo
Victor Augusto
fuente
1
./foono sé cómo la respuesta aceptada no tiene esta importante orden
Suhaib
@Suhaib Mi respuesta aceptada no tenía ese comando porque la pregunta original no lo pedía. Se tituló "Cómo ejecutar C / C ++ en una consola Unix / terminal Mac", que interpreto como "Cómo ejecutar el compilador c / c ++". El título se cambió posteriormente a "compilar y ejecutar". He actualizado mi respuesta para reflejar la pregunta modificada.
camh
15

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

Puede mostrar esta ruta en la terminal con este comando:

echo $ RUTA

En Mac OS X (por defecto), 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:

cat mytextfile.txt

Esto se ejecuta /bin/caty muestra mytextfile.txt en el terminal.

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

/ Usuarios / oliver / MyProgram

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

MyProject / MyProgram

O digamos que estaba en el directorio /Users/oliver/MyProject2y quería ejecutar /Users/oliver/MyProject/MyProgram, puedo usar una ruta relativa como esta, para ejecutarlo:

../MyProject/MyProgram

Del mismo modo, si estoy en el mismo directorio MyProgramque necesito para usar una ruta relativa "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 está actualmente use el pwdcomando.

Si normalmente coloca programas en un lugar en 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 otros programas utilizados regularmente, puede ser conveniente alterar su ruta de búsqueda ejecutable.

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

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

Aquí el carácter tilde (~) se está utilizando 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 valor 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 instalados ~/binse utilicen con preferencia a los ejecutables del sistema, debe reordenar la declaración de exportación de la siguiente manera:

export PATH=~/bin:$PATH
orj
fuente
Si agrega los comentarios de 'onebyone.livejournal.com' en mi propia respuesta sobre seguridad, esta respuesta está completa. Gracias.
PA
10

Ryan, estoy cambiando esto para que sea una respuesta en lugar de un comentario, ya que parece que fui demasiado breve. Haz todo esto en "Terminal".

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

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

    cd ~/programs/myprograms/
    (El ~ es un acceso directo para su hogar, es decir, / Usuarios / Ryan / programas / myprograms /, reemplace con la ubicación que realmente utilizó).

  2. Compilarlo

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

    No debería haber NADA devuelto si fue exitoso, y eso está bien . En general, obtienes retornos por fallas.

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

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

nerdwaller
fuente
Gracias esto funcionó. ¿Sabrías algún tutorial que explique estas cosas? ¿Qué significa exactamente G ++, qué es el interruptor 'o' y cualquier otra cosa que pueda surgir?
Ryan
agregue un comentario sobre makeno funcionará porque no hay un archivo MAKE.
Ryan, puedes escribir "man g ++" en el terminal para obtener las "páginas man" (es decir, manuales, que supongo que Apple ha incorporado). Sin embargo, no he visto ningún gran tutorial. Sin embargo, la página de manual en g ++ puede ser bastante profunda con CFLAGS y todo tipo de opciones avanzadas de compilación.
nerdwaller
Nitpick: "No debería haber NADA [impreso] si fue exitoso, y eso está bien. En general, obtienes [salida] en caso de fallas". Siempre habrá un valor de retorno, 0 en caso de éxito, no 0 en caso de error.
sepp2k
Fusionada de stackoverflow.com/questions/13714436/… (tratando de consolidar algunas instrucciones básicas para esto)
Shog9
9

Una forma compacta de hacerlo podría ser:

make foo && ./$_

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

Markthethomas
fuente
8

Suponiendo que el directorio actual no está en la ruta, la sintaxis sí ./[name of the program].

Por ejemplo ./a.out

Pensilvania
fuente
2
¡Bien por usted! El punto y la barra están ahí porque en muchos sistemas, el directorio actual ("." En términos de Unix) no es parte de la ruta buscada por el shell. Por lo tanto, agregarlo hace explícito qué programa desea ejecutar.
Descanse el
7

Agregue lo siguiente para obtener las mejores advertencias, no se arrepentirá. Si puede, compile WISE (la advertencia es un error)

- Wall -pedantic -Weffc++ -Werror
Nazgob
fuente
Realmente debería ser el valor predeterminado.
Konrad Rudolph
6

Para compilar programas C o C ++, hay un comando común:

  1. make filename

  2. ./filename

make construirá su archivo fuente en un archivo ejecutable con el mismo nombre. Pero si desea usar la forma estándar, puede usar el compilador gcc para construir programas en C & g ++ para c ++

Para C:

gcc filename.c

./a.out

Para C ++:

g++ filename.cpp

./a.out
Yogesh Nogia
fuente
2

Use a makefile. Incluso para proyectos muy pequeños (= un archivo), el esfuerzo probablemente valga la pena porque puede tener varios conjuntos de configuraciones del compilador para probar cosas. La depuración y la implementación funcionan mucho más fácilmente de esta manera.

Lea el makemanual , parece bastante largo a primera vista, pero la mayoría de las secciones se pueden leer. En general, me llevó unas horas y me hizo mucho más productivo.

Konrad Rudolph
fuente
Gracias, esa es una buena respuesta también. Realmente trato de usar make tan papilla como puedo y esa es también una razón para olvidar la sintaxis de la forma "fácil".
PA
2

simplemente ingrese en el directorio en el que se encuentra su archivo c / cpp.

para compilar y ejecutar código c.

$gcc filename.c
$./a.out filename.c

para compilar y ejecutar código c ++.

$g++ filename.cpp
$./a.out filename.cpp

"$" es el símbolo de terminal de Mac predeterminado

Shiv Prakash
fuente
2

Para compilar y ejecutar un código fuente cpp desde la terminal de Mac, es necesario hacer lo siguiente:

  1. Si la ruta del archivo cpp es somePath / fileName.cpp, primero vaya al directorio con la ruta somePath
  2. Para compilar fileName.cpp, escriba c ++ fileName.cpp -o fileName
  3. Para ejecutar el programa, escriba ./fileName
Alper Gur
fuente
0

Ejecutar un archivo .C usando el terminal es un proceso de dos pasos. El primer paso es escribir gcc en el terminal y soltar el archivo .C en el terminal, y luego presionar Enter:

username$ gcc /Desktop/test.c 

En el segundo paso, ejecute el siguiente comando:

username$ ~/a.out
Himanshu Mahajan
fuente
0

Para ejecutar archivos c ++ ejecutados debajo del comando, suponiendo que el nombre del archivo es "main.cpp"

1.Compilar para hacer un archivo objeto desde un archivo c ++.

g++ -c main.cpp -o main.o

2. Dado que #include <conio.h>no es compatible con MacOS, debemos usar su alternativa que es compatible con Mac #include <curses.h>. Ahora el archivo de objeto debe convertirse en un archivo ejecutable. Para usar curses.htenemos que usar la biblioteca -lcurses.

g++ -o main main.o -lcurses

3. Ahora ejecute el ejecutable.

./main
Teena nath Paul
fuente