Come compilare ed eseguire C / C ++ in una console Unix / terminale Mac?


143

Come posso compilare / eseguire C o C ++ nella console Unix o in un terminale Mac?

(Lo so, dimenticalo e riapprendilo di nuovo. È tempo di scriverlo.)

Risposte:


188

Se si tratta di un semplice programma a sorgente singolo:

make foo

dove il file sorgente è foo.c o foo.cpp, ecc.

Non hai nemmeno bisogno di un makefile. Make ha abbastanza regole integrate per creare il tuo file sorgente in un eseguibile con lo stesso nome, meno l'estensione.

L'esecuzione dell'eseguibile appena creato equivale all'esecuzione di qualsiasi programma, ma molto spesso sarà necessario specificare il percorso dell'eseguibile poiché la shell cercherà solo cosa c'è dentro $PATHper trovare gli eseguibili, e molto spesso questo non include la directory corrente ( .).

Quindi, per eseguire l'eseguibile incorporato foo:

./foo

Non mi rendevo conto delle regole integrate propagate agli obiettivi specificati quando si invocava make. Imparato qualcosa di nuovo oggi =)
Branan

"-bash: make: comando non trovato" <- Devi scaricare lo strumento sviluppatore e i componenti extra.
dgig

17
Non lo è make main.cpp, ma make main.
Craig McMahon,

@CraigMcMahon Grazie per il tuo contributo!
Hlawuleka MAS,

Ho imparato qualcosa di nuovo, questo è fantastico!
FossilizedCarlos

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

31
da noob provavo tanta pena per non aver incluso il "./" durante l'esecuzione
funk-shun,

2
@ funk-shun Vorrei che il tuo commento fosse il risultato migliore quando cercavo su Google questo genere di cose - mi ci è voluto un sacco per capirlo (per il mio mac) - Grazie!
Cory W.

10
Ho usato "gcc main.cpp -o main.out", e ottengo questo errore, Simboli non definiti per l'architettura x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... risulta che la ragione è che gcc default-links è libc. mentre usando g ++ si collegherà con libstdc ++. Quindi utilizzare "g ++ main.cpp -o main.out" potrebbe essere migliore.
Rachel,

1
@ Rachel Ho anche riscontrato lo stesso problema.
Goldname

1
A proposito di Undefined symbols for architecture x86_64 problema, modifico il comando come segue:, gcc -lstdc++ main.cpp -o main.oute funziona sul mio Mac. tramite collegamento: stackoverflow.com/questions/11852568/...
Rotoava

69

Questo è il comando che funziona su tutte le macchine Unix ... Lo uso su Linux / Ubuntu, ma funziona anche su OS X. Digita il seguente comando in Terminal.app .

$ g++ -o lab21 iterative.cpp

-o la lettera O non è zero

lab21 sarà il tuo file eseguibile

iterative.cpp è il tuo file c ++

Dopo aver eseguito quel comando digitare quanto segue nel terminale per eseguire il programma:

$ ./lab21

1
Questo è ciò che ha funzionato per me. Ho provato le altre soluzioni sopra senza fortuna. Grazie!
nmrichards,

ha funzionato anche per me, non è necessario installare nulla, soluzione perfetta.
Chander Shakher Ghorela - Guru

33

Due passaggi per me:

primo:

make foo

poi:

./foo

1
./foonon so come la risposta accettata non abbia questo importante comando
Suhaib,

@Suhaib La mia risposta accettata non aveva quel comando perché la domanda originale non lo richiedeva. È stato intitolato "Come eseguire C / C ++ in una console Unix / Terminale Mac" - che interpreto come "Come eseguire il compilatore c / c ++". Il titolo è stato successivamente modificato in "compilare ed eseguire". Ho aggiornato la mia risposta per riflettere la domanda modificata.
Camh,

15

Tutta l'esecuzione dell'applicazione in un ambiente Unix (Linux, Mac OS X, AIX, ecc.) Dipende dal percorso di ricerca eseguibile.

È possibile visualizzare questo percorso nel terminale con questo comando:

echo $ PATH

Su Mac OS X (per impostazione predefinita) verrà visualizzato il seguente percorso di ricerca separato da due punti:

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

Quindi qualsiasi eseguibile nelle directory elencate può essere eseguito semplicemente digitando il loro nome. Per esempio:

cat mytextfile.txt

Questo viene eseguito /bin/cate visualizza mytextfile.txt al terminale.

Per eseguire qualsiasi altro comando che non si trova nel percorso di ricerca dell'eseguibile, è necessario qualificare il percorso dell'eseguibile. Quindi dire che avevo un eseguibile chiamato MyProgram nella mia directory home su Mac OS XI posso qualificarlo completamente in questo modo:

/ Users / oliver / MyProgram

Se ti trovi in ​​una posizione vicina al programma che desideri eseguire, puoi qualificare il nome con un percorso parziale. Ad esempio, se MyProgramero nella directory /Users/oliver/MyProjectI ed io ero nella mia home directory, posso qualificare il nome dell'eseguibile in questo modo e farlo eseguire:

MyProject / MyProgram

O dire che ero nella directory /Users/oliver/MyProject2e che volevo eseguire, /Users/oliver/MyProject/MyProgramposso usare un percorso relativo come questo, per eseguirlo:

../MyProject/MyProgram

Allo stesso modo se mi trovo nella stessa directory in cui MyProgramho bisogno di utilizzare un percorso relativo "directory corrente". La directory corrente in cui ci si trova è il carattere punto seguito da una barra. Per esempio:

./MyProgram

Per determinare quale directory si è attualmente in uso utilizzare il pwdcomando.

Se di solito metti i programmi in un posto sul tuo disco rigido che desideri eseguire senza dover qualificare i loro nomi. Ad esempio, se nella directory home è presente una directory "bin" per gli script di shell utilizzati regolarmente di altri programmi, potrebbe essere saggio modificare il percorso di ricerca eseguibile.

Questo può essere fatto facilmente creando o modificando il .bash_profilefile esistente nella tua home directory e aggiungendo le righe:

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

Qui il carattere tilde (~) viene utilizzato come scorciatoia per / Users / oliver. Si noti inoltre che la riga hash bang (#!) Deve essere la prima riga del file (se non esiste già). Nota anche che questa tecnica richiede che la shell di accesso sia bash (impostazione predefinita su Mac OS X e la maggior parte delle distribuzioni Linux). Si noti inoltre che se si desidera che i programmi installati ~/binvengano utilizzati preferibilmente agli eseguibili di sistema, è necessario riordinare la dichiarazione di esportazione come segue:

export PATH=~/bin:$PATH

Se aggiungi i commenti di "onebyone.livejournal.com" sulla mia risposta sulla sicurezza, questa risposta è completa. Grazie.
PA

10

Ryan, sto cambiando questo per essere una risposta anziché un commento, dal momento che sembra che sia stato troppo breve. Fai tutto questo in "Terminale".

Per utilizzare il compilatore G ++, è necessario:

  1. Passare alla directory in cui è stato memorizzato il file * .cpp.

    cd ~/programs/myprograms/
    (la ~ è una scorciatoia per la tua casa, cioè / Users / Ryan / programmi / myprograms /, sostituisci con la posizione che hai effettivamente utilizzato.)

  2. Compilalo

    g++ input.cpp -o output.bin (output.bin può essere qualsiasi cosa con qualsiasi estensione, davvero. bin è comune su unix.)

    Non ci dovrebbe essere NULLA restituito se ha avuto successo, e va bene . Generalmente si ottengono ritorni sugli errori.

    Tuttavia, se si digita ls, verrà visualizzato l'elenco dei file nella stessa directory. Ad esempio, vedresti le altre cartelle, input.cpp e output.bin

  3. Dall'interno della directory, ora eseguilo con ./outbut.bin


Grazie ha funzionato. Saresti a conoscenza di tutorial che spiegherebbero queste cose? Come esattamente cosa significa G ++, qual è l'opzione 'o' e qualcos'altro che potrebbe emergere?
Ryan,

aggiungere un commento su makenon funzionerà perché non c'è makefile.

Ryan, puoi digitare "man g ++" nel terminale per ottenere le "pagine man" (ovvero i manuali, che immagino che Apple abbia incorporato). Non ho visto grandi tutorial però. Tuttavia, la pagina man su g ++ può essere abbastanza approfondita con CFLAGS e ogni sorta di opzioni di compilazione avanzate.
nerdwaller,

Nitpick: "Non ci dovrebbe essere NULLA [stampato] se ha avuto successo, e va bene. In genere si ottiene [output] in caso di errori." Ci sarà sempre un valore di ritorno, 0 in caso di successo, non 0 in caso di fallimento.
sepp2k,

Unita da stackoverflow.com/questions/13714436/… (cercando di consolidare alcune istruzioni di base per questo)
Shog9

9

Un modo compatto per farlo potrebbe essere:

make foo && ./$_

Bello avere un one-liner in modo da poter rieseguire facilmente il tuo eseguibile di nuovo.


8

Supponendo che la directory corrente non sia nel percorso, la sintassi lo è ./[name of the program].

Per esempio ./a.out


2
Buon per te! Il punto e la barra sono presenti perché su molti sistemi, la directory corrente ("." In termini Unix) non fa parte del percorso cercato dalla shell. Quindi, aggiungendolo si rende esplicito quale programma si desidera eseguire.
Rilassati il

7

Aggiungi seguito per ottenere i migliori avvisi, non te ne pentirai. Se possibile, compilare WISE (l'avviso è un errore)

- Wall -pedantic -Weffc++ -Werror

Dovrebbe davvero essere il valore predefinito.
Konrad Rudolph,

6

Per compilare programmi C o C ++, esiste un comando comune:

  1. make filename

  2. ./filename

make costruirà il tuo file sorgente in un file eseguibile con lo stesso nome. Ma se vuoi usare il modo standard, potresti usare il compilatore gcc per creare programmi C e g ++ per c ++

Per C:

gcc filename.c

./a.out

Per C ++:

g++ filename.cpp

./a.out

2

Usa a makefile. Anche per progetti molto piccoli (= un file), probabilmente ne vale la pena perché è possibile avere diversi set di impostazioni del compilatore per testare le cose. Il debug e la distribuzione funzionano in questo modo molto più facilmente.

Leggi il makemanuale , a prima vista sembra piuttosto lungo, ma la maggior parte delle sezioni si può semplicemente sfogliare. Tutto sommato mi ci sono volute alcune ore e mi ha reso molto più produttivo.


Grazie, anche questa è una buona risposta. Cerco davvero di usare make il più possibile e questo è anche un motivo per cui ho dimenticato la sintassi del modo "facile".
PA,


2

basta inserire nella directory in cui si trova il tuo file c / cpp.

per compilare ed eseguire codice c.

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

per compilare ed eseguire codice c ++.

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

"$" è il simbolo del terminale mac predefinito


2

Per compilare ed eseguire un codice sorgente cpp dal terminale Mac è necessario:

  1. Se il percorso del file cpp è somePath / fileName.cpp, prima vai alla directory con path somePath
  2. Per compilare fileName.cpp, digitare c ++ fileName.cpp -o fileName
  3. Per eseguire il programma, digitare ./fileName

0

L'esecuzione di un file .C utilizzando il terminale è un processo in due passaggi. Il primo passo è digitare gcc nel terminale e rilasciare il file .C sul terminale, quindi premere Enter:

username$ gcc /Desktop/test.c 

Nel secondo passaggio, eseguire il comando seguente:

username$ ~/a.out

0

Per l'esecuzione di file c ++ eseguiti sotto il comando, Supponendo che il nome del file sia "main.cpp"

1.Compilare per creare il file oggetto dal file c ++.

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

2.Poiché #include <conio.h>non supporta MacOS, quindi dovremmo usare la sua alternativa che supporta Mac che è #include <curses.h>. Ora il file oggetto deve essere convertito in file eseguibile. Per usare curses.hdobbiamo usare la libreria -lcurses.

g++ -o main main.o -lcurses

3.Ora esegui l'eseguibile.

./main
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.