Comment compiler et exécuter C / C ++ dans une console Unix / un terminal Mac?

143

Comment puis-je compiler / exécuter C ou C ++ dans une console Unix ou un terminal Mac?

(Je le sais, oublie-le et réapprends-le. Il est temps de l'écrire.)

Pennsylvanie
la source

Réponses:

188

S'il s'agit d'un simple programme source unique:

make foo

où le fichier source est foo.c ou foo.cpp, etc.

Vous n'avez même pas besoin d'un makefile. Make a suffisamment de règles intégrées pour créer votre fichier source dans un exécutable du même nom, sans l'extension.

L'exécution de l'exécutable que vous venez de créer est la même chose que l'exécution de n'importe quel programme - mais vous devrez le plus souvent spécifier le chemin d'accès à l'exécutable car le shell ne recherchera que ce qu'il y a $PATHpour trouver les exécutables, et le plus souvent cela n'inclut pas le répertoire courant ( .).

Donc, pour exécuter l'exécutable construit foo:

./foo
camh
la source
Je n'avais pas réalisé que les règles intégrées se propageaient aux cibles spécifiées lors de l'appel de make.
J'ai
"-bash: make: command not found" <- Vous devez avoir téléchargé l'outil de développement et les composants supplémentaires.
dgig
17
Ce n'est pas make main.cpp, mais make main.
Craig McMahon
@CraigMcMahon Merci pour votre contribution!
Hlawuleka MAS
J'ai appris quelque chose de nouveau, c'est génial!
FossilizedCarlos
112
gcc main.cpp -o main.out  
./main.out
Andrey Neverov
la source
31
en tant que noob, j'ai eu tellement de chagrin de ne pas avoir inclus le "./" lors de l'exécution
funk-shun
2
@ funk-shun J'aurais aimé que votre commentaire soit le meilleur résultat lors de la recherche sur Google de ce genre de chose - m'a pris une éternité pour comprendre cela (pour mon mac) - Merci!
Cory W.
10
J'ai utilisé "gcc main.cpp -o main.out", et j'ai obtenu cette erreur, Symboles non définis pour l'architecture x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... il s'avère que la raison en est que les liens par défaut de gcc sont libc. tout en utilisant g ++ établira un lien avec libstdc ++. Donc utiliser "g ++ main.cpp -o main.out" peut être mieux.
Rachel
1
@Rachel J'ai aussi connu le même problème.
Goldname
1
À propos du Undefined symbols for architecture x86_64 problème, je modifie la commande comme suit:, gcc -lstdc++ main.cpp -o main.outet cela fonctionne sur mon Mac. via le lien: stackoverflow.com/questions/11852568/…
rotoava
69

C'est la commande qui fonctionne sur toutes les machines Unix ... Je l'utilise sous Linux / Ubuntu, mais elle fonctionne également sous OS X. Tapez la commande suivante dans Terminal.app .

$ g++ -o lab21 iterative.cpp

-o la lettre O est-elle différente de zéro

lab21 sera votre fichier exécutable

iterative.cpp est votre fichier c ++

Après avoir exécuté cette commande, tapez ce qui suit dans le terminal pour exécuter votre programme:

$ ./lab21
Komengem
la source
1
C'est ce qui a fonctionné pour moi. J'ai essayé les autres solutions ci-dessus sans succès. Merci!
nmrichards
a fonctionné pour moi aussi, pas besoin d'installer quoi que ce soit, solution parfaite.
Chander Shakher Ghorela - Guru
33

Deux étapes pour moi:

première:

make foo

puis:

./foo
Victor Augusto
la source
1
./fooJe ne sais pas comment la réponse acceptée n'a pas cet élément de commandement important
Suhaib
@Suhaib Ma réponse acceptée n'avait pas cette commande parce que la question d'origine ne le demandait pas. Il était intitulé "Comment exécuter C / C ++ dans une console Unix / un terminal Mac" - que j'interprète comme "Comment exécuter le compilateur c / c ++". Le titre a ensuite été changé en "compiler et exécuter". J'ai mis à jour ma réponse pour refléter la question modifiée.
camh
15

Toute exécution d'application dans un environnement Unix (Linux, Mac OS X, AIX, etc.) dépend du chemin de recherche de l'exécutable.

Vous pouvez afficher ce chemin dans le terminal avec cette commande:

echo $ PATH

Sous Mac OS X (par défaut), cela affichera le chemin de recherche séparé par deux-points suivant:

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

Ainsi, tout exécutable dans les répertoires listés peut être exécuté simplement en tapant son nom. Par exemple:

chat mytextfile.txt

Cela s'exécute /bin/catet affiche mytextfile.txt sur le terminal.

Pour exécuter toute autre commande qui ne figure pas dans le chemin de recherche de l'exécutable, vous devez qualifier le chemin d'accès à l'exécutable. Donc, disons que j'ai un exécutable appelé MyProgram dans mon répertoire personnel sur Mac OS XI peut le qualifier pleinement comme ceci:

/ Utilisateurs / oliver / MyProgram

Si vous êtes dans un emplacement proche du programme que vous souhaitez exécuter, vous pouvez qualifier le nom avec un chemin partiel. Par exemple, si j'étais MyProgramdans le répertoire que /Users/oliver/MyProjectmoi et moi étions dans mon répertoire personnel, je peux qualifier le nom de l'exécutable comme ceci et le faire exécuter:

MonProjet / MonProgramme

Ou disons que j'étais dans le répertoire /Users/oliver/MyProject2et que je voulais exécuter, /Users/oliver/MyProject/MyProgramje peux utiliser un chemin relatif comme celui-ci, pour l'exécuter:

../MyProject/MyProgram

De même si je suis dans le même répertoire que MyProgramje dois utiliser un chemin relatif "répertoire courant". Le répertoire actuel dans lequel vous vous trouvez est le caractère point suivi d'une barre oblique. Par exemple:

./MonProgramme

Pour déterminer le répertoire que vous utilisez actuellement, utilisez la pwdcommande.

Si vous placez couramment des programmes dans un endroit de votre disque dur que vous souhaitez exécuter sans avoir à qualifier leurs noms. Par exemple, si vous avez un répertoire "bin" dans votre répertoire personnel pour les scripts shell régulièrement utilisés d'autres programmes, il peut être judicieux de modifier le chemin de recherche de votre exécutable.

Cela peut être fait facilement en créant ou en modifiant le .bash_profilefichier existant dans votre répertoire personnel et en ajoutant les lignes:

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

Ici, le caractère tilde (~) est utilisé comme raccourci pour / Users / oliver. Notez également que la ligne hash bang (#!) Doit être la première ligne du fichier (si elle n'existe pas déjà). Notez également que cette technique nécessite que votre shell de connexion soit bash (la valeur par défaut sur Mac OS X et la plupart des distributions Linux). Notez également que si vous souhaitez que vos programmes installés dans ~/binsoient utilisés de préférence aux exécutables système, vous devez réorganiser l'instruction d'exportation comme suit:

export PATH=~/bin:$PATH
orj
la source
Si vous ajoutez les commentaires de «onebyone.livejournal.com» sur ma propre réponse sur la sécurité, cette réponse est complète. Je vous remercie.
PA
10

Ryan, je change cela pour être une réponse au lieu d'un commentaire, car il semble que j'ai été trop bref. Faites tout cela dans "Terminal".

Pour utiliser le compilateur G ++, vous devez faire ceci:

  1. Accédez au répertoire dans lequel vous avez stocké le fichier * .cpp.

    cd ~/programs/myprograms/
    (le ~ est un raccourci vers votre domicile, c'est-à-dire / Users / Ryan / programs / myprograms /, remplacez-le par l'emplacement que vous avez réellement utilisé.)

  2. Compilez-le

    g++ input.cpp -o output.bin (output.bin peut être n'importe quoi avec n'importe quelle extension, vraiment. bin est juste commun sous unix.)

    Il ne devrait y avoir RIEN retourné s'il a réussi, et ce n'est pas grave . Généralement, vous obtenez des retours sur les échecs.

    Cependant, si vous tapez ls, vous verrez la liste des fichiers dans le même répertoire. Par exemple, vous verrez les autres dossiers, input.cpp et output.bin

  3. Depuis l'intérieur du répertoire, exécutez-le maintenant avec ./outbut.bin

nerdwaller
la source
Merci cela a fonctionné. Connaissez-vous des tutoriels qui expliqueraient ces choses? Comme ce que signifie exactement G ++, qu'est-ce que le commutateur «o» et tout ce qui pourrait survenir?
Ryan
ajouter un commentaire sur makene fonctionnera pas car il n'y a pas de fichier Make.
Ryan, vous pouvez taper "man g ++" dans le terminal pour obtenir les "pages de manuel" (c'est-à-dire les manuels, que je suppose qu'Apple a intégrés). Cependant, je n'ai vu aucun excellent tutoriel. Cependant, la page de manuel sur g ++ peut devenir assez détaillée avec CFLAGS et toutes sortes d'options de compilation avancées.
nerdwaller
Nitpick: "Il ne devrait y avoir RIEN [imprimé] si cela a réussi, et ce n'est pas grave. Généralement, vous obtenez [sortie] en cas d'échec." Il y aura toujours une valeur de retour, 0 en cas de succès, non 0 en cas d'échec.
sepp2k
Fusionné depuis stackoverflow.com/questions/13714436/… (essayant de consolider quelques instructions de base pour cela)
Shog9
9

Une façon compacte de faire cela pourrait être:

make foo && ./$_

C'est bien d'avoir une ligne unique pour que vous puissiez simplement réexécuter votre exécutable facilement.

Markthethomas
la source
8

En supposant que le répertoire actuel ne se trouve pas dans le chemin, la syntaxe est ./[name of the program].

Par exemple ./a.out

Pennsylvanie
la source
2
Bien pour vous! Le point et la barre oblique sont là car sur de nombreux systèmes, le répertoire courant ("." En termes Unix) ne fait pas partie du chemin recherché par le shell. Ainsi, l'ajouter rend explicite le programme que vous souhaitez exécuter.
détendre
7

Ajoutez ce qui suit pour obtenir les meilleurs avertissements, vous ne le regretterez pas. Si vous le pouvez, compilez WISE (l'avertissement est une erreur)

- Wall -pedantic -Weffc++ -Werror
Nazgob
la source
Devrait vraiment être la valeur par défaut.
Konrad Rudolph
6

Pour compiler des programmes C ou C ++, il existe une commande courante:

  1. make filename

  2. ./filename

make construira votre fichier source dans un fichier exécutable avec le même nom. Mais si vous souhaitez utiliser la méthode standard, vous pouvez utiliser le compilateur gcc pour créer des programmes C et g ++ pour C ++

Pour C:

gcc filename.c

./a.out

Pour C ++:

g++ filename.cpp

./a.out
Yogesh Nogia
la source
2

Utilisez un makefile. Même pour de très petits projets (= un seul fichier), l'effort en vaut probablement la peine car vous pouvez avoir plusieurs ensembles de paramètres de compilateur pour tester les choses. Le débogage et le déploiement fonctionnent beaucoup plus facilement de cette façon.

Lisez le makemanuel , il semble assez long à première vue, mais la plupart des sections peuvent être parcourues. Dans l'ensemble, cela m'a pris quelques heures et m'a rendu beaucoup plus productif.

Konrad Rudolph
la source
Merci, c'est aussi une bonne réponse. J'essaye vraiment d'utiliser make aussi bien que je peux et c'est aussi une raison pour moi d'oublier la syntaxe de la manière "facile".
PA
2

entrez simplement dans le répertoire dans lequel se trouve votre fichier c / cpp.

pour compiler et exécuter du code c.

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

pour compiler et exécuter du code C ++.

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

"$" est le symbole par défaut du terminal Mac

Shiv Prakash
la source
2

Afin de compiler et d'exécuter un code source cpp à partir du terminal Mac, il faut faire ce qui suit:

  1. Si le chemin du fichier cpp est somePath / fileName.cpp, allez d'abord dans le répertoire avec le chemin somePath
  2. Pour compiler fileName.cpp, tapez c ++ fileName.cpp -o fileName
  3. Pour exécuter le programme, tapez ./fileName
Alper Gur
la source
0

L'exécution d'un fichier .C à l'aide du terminal est un processus en deux étapes. La première étape consiste à taper gcc dans le terminal et à déposer le fichier .C dans le terminal, puis à appuyer sur Enter:

username$ gcc /Desktop/test.c 

Dans la deuxième étape, exécutez la commande suivante:

username$ ~/a.out
Himanshu Mahajan
la source
0

Pour exécuter les fichiers C ++, exécutez la commande ci-dessous, en supposant que le nom du fichier est "main.cpp"

1.Compilez pour créer un fichier objet à partir d'un fichier c ++.

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

2.Puisque #include <conio.h>ne prend pas en charge sous MacOS, nous devons donc utiliser son alternative qui prend en charge sous Mac #include <curses.h>. Le fichier objet doit maintenant être converti en fichier exécutable. Pour utiliser, curses.hnous devons utiliser la bibliothèque -lcurses.

g++ -o main main.o -lcurses

3.Lancez maintenant l'exécutable.

./main
Teena nath Paul
la source