Como compilar e executar C / C ++ em um console Unix / terminal Mac?

143

Como posso compilar / executar C ou C ++ no console Unix ou em um terminal Mac?

(Eu sei, esqueça e reaprenda novamente. Hora de anotá-la.)

PA
fonte

Respostas:

188

Se for um programa simples de fonte única:

make foo

onde o arquivo de origem é foo.c ou foo.cpp, etc.

Você nem precisa de um makefile. O Make possui regras internas suficientes para transformar seu arquivo de origem em um executável com o mesmo nome, menos a extensão.

Executar o executável recém-criado é o mesmo que executar qualquer programa - mas você geralmente precisará especificar o caminho para o executável, pois o shell pesquisará apenas o que há $PATHpara encontrar executáveis ​​e, na maioria das vezes, isso não inclui o diretório atual ( .)

Então, para executar o executável compilado foo:

./foo
camh
fonte
Não percebi as regras internas propagadas para os destinos especificados ao invocar o make. Aprendi algo novo hoje =)
Branan 21/10/08
"-bash: make: command not found" <- Você precisa ter a ferramenta de desenvolvedor e os componentes extras baixados.
dgig
17
Não é make main.cpp, mas make main.
Craig McMahon
@CraigMcMahon Obrigado pela sua contribuição!
Hlawuleka MAS
Aprendi algo novo, isso é ótimo!
precisa
112
gcc main.cpp -o main.out  
./main.out
Andrey Neverov
fonte
31
como um noob i teve tanta dor para não incluir o "./" ao executar
funk-shun
2
@ funk-shun Eu gostaria que seu comentário fosse o melhor resultado ao pesquisar esse tipo de coisa - levei uma eternidade para descobrir isso (para o meu mac) - Obrigado!
Cory W. #
10
Eu usei "gcc main.cpp -o main.out" e recebo esse erro, Símbolos indefinidos para a arquitetura x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... acontece que o motivo é gcc default-links é libc. enquanto estiver usando o g ++, será vinculado ao libstdc ++. Portanto, use "g ++ main.cpp -o main.out" pode ser melhor.
247 Rachel
1
@ Rachel Eu também tive o mesmo problema.
Goldname 8/09/16
1
Sobre o Undefined symbols for architecture x86_64 problema, modifico o comando da seguinte maneira:, gcc -lstdc++ main.cpp -o main.oute isso funciona no meu Mac. via link: stackoverflow.com/questions/11852568/…
rotoava 6/18
69

Este é o comando que funciona em todas as máquinas Unix ... Eu o uso no Linux / Ubuntu, mas funciona no OS X também. Digite o seguinte comando no Terminal.app .

$ g++ -o lab21 iterative.cpp

-o é a letra O diferente de zero

lab21 será seu arquivo executável

iterative.cpp é o seu arquivo c ++

Depois de executar esse comando, digite o seguinte no terminal para executar o seu programa:

$ ./lab21
Komengem
fonte
1
Isto é o que funcionou para mim. Eu tentei as outras soluções acima sem sorte. Obrigado!
Nmrichards
funcionou para mim também, não há necessidade de instalar nada, solução perfeita.
Chander Shakher Ghorela - Guru
33

Dois passos para mim:

primeiro:

make foo

então:

./foo
Victor Augusto
fonte
1
./foodunno resposta como aceita não tem esta importante peça de comando
Suhaib
@Shahaib Minha resposta aceita não tinha esse comando, porque a pergunta original não a solicitava. Foi intitulado "Como executar C / C ++ em um console Unix / terminal Mac" - que eu interpreto como "Como executar o compilador c / c ++". O título foi posteriormente alterado para "compilar e executar". Atualizei minha resposta para refletir a pergunta alterada.
CAMH
15

Toda execução de aplicativo em um ambiente Unix (Linux, Mac OS X, AIX etc.) depende do caminho da pesquisa executável.

Você pode exibir este caminho no terminal com este comando:

eco $ PATH

No Mac OS X (por padrão), isso exibirá o seguinte caminho de pesquisa separado por dois pontos:

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

Portanto, qualquer executável nos diretórios listados pode ser executado apenas digitando seu nome. Por exemplo:

cat mytextfile.txt

Isso é executado /bin/cate exibe mytextfile.txt no terminal.

Para executar qualquer outro comando que não esteja no caminho de pesquisa executável, você deve qualificar o caminho para o executável. Digamos que eu tenha um executável chamado MyProgram no meu diretório pessoal no Mac OS XI que possa qualificá-lo totalmente da seguinte maneira:

/ Usuários / oliver / MyProgram

Se você estiver em um local próximo ao programa que deseja executar, poderá qualificar o nome com um caminho parcial. Por exemplo, se MyProgramestava no diretório em que /Users/oliver/MyProjecteu e eu estávamos no diretório inicial, posso qualificar o nome do executável assim e executá-lo:

MyProject / MyProgram

Ou diga que eu estava no diretório /Users/oliver/MyProject2e queria executar. /Users/oliver/MyProject/MyProgramPosso usar um caminho relativo como este, para executá-lo:

../MyProject/MyProgram

Da mesma forma, se eu estiver no mesmo diretório MyProgramque preciso usar o caminho relativo do "diretório atual". O diretório atual em que você está é o caractere de ponto seguido por uma barra. Por exemplo:

./MyProgram

Para determinar qual diretório você está atualmente usando o pwdcomando

Se você costuma colocar programas em um local do disco rígido que deseja executar sem precisar qualificar seus nomes. Por exemplo, se você tiver um diretório "bin" no diretório inicial para scripts de shell usados ​​regularmente de outros programas, pode ser aconselhável alterar seu caminho de pesquisa executável.

Isso pode ser feito facilmente criando ou editando o .bash_profilearquivo existente no diretório inicial e adicionando as linhas:

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

Aqui, o caractere til (~) está sendo usado como um atalho para / Users / oliver. Observe também que a linha hash bang (#!) Precisa ser a primeira linha do arquivo (se ainda não existir). Observe também que essa técnica exige que o seu shell de login seja bash (o padrão no Mac OS X e na maioria das distribuições Linux). Observe também que se você deseja que seus programas instalados ~/binsejam usados ​​preferencialmente aos executáveis ​​do sistema, você deve reordenar a instrução de exportação da seguinte maneira:

export PATH=~/bin:$PATH
orj
fonte
Se você adicionar os comentários de 'onebyone.livejournal.com' em minha própria resposta sobre segurança, esta resposta estará completa. Obrigado.
PA
10

Ryan, estou mudando isso para ser uma resposta em vez de um comentário, pois parece que fui muito breve. Faça tudo isso em "Terminal".

Para usar o compilador G ++, você precisa fazer o seguinte:

  1. Navegue para o diretório em que você armazenou o arquivo * .cpp.

    cd ~/programs/myprograms/
    (o ~ é um atalho para sua casa, ou seja, / Users / Ryan / programs / myprograms /, substitua pelo local que você realmente usou.)

  2. Compile

    g++ input.cpp -o output.bin (output.bin pode ser qualquer coisa com qualquer extensão, na verdade. bin é comum no unix.)

    Nada deve ser retornado se tiver sido bem-sucedido, e tudo bem . Geralmente você obtém retornos por falhas.

    No entanto, se você digitar ls, verá a lista de arquivos no mesmo diretório. Por exemplo, você veria as outras pastas, input.cpp e output.bin

  3. De dentro do diretório, agora execute-o com ./outbut.bin

nerdwaller
fonte
Graças isso funcionou. Você conheceria algum tutorial que explicasse essas coisas? Como o que exatamente G ++ significa, qual é a opção 'o' e qualquer outra coisa que possa surgir?
Ryan
adicione um comentário sobre makenão funcionará porque não há makefile.
Ryan, você pode digitar "man g ++" no terminal para obter as "páginas de manual" (ou seja, manuais, que eu acho que a Apple incorporou). Eu ainda não vi nenhum ótimo tutorial. Embora a página de manual do g ++ possa se aprofundar bastante no CFLAGS e em todos os tipos de opções avançadas de compilação.
Nerdwaller 04/12/12
Nitpick: "Não deve haver NADA [impresso] se tiver sido bem-sucedido, e tudo bem. Geralmente você obtém [saída] em caso de falhas." Sempre haverá um valor de retorno, 0 em caso de sucesso, não 0 em caso de falha.
sepp2k
Mescladas de stackoverflow.com/questions/13714436/... (tentando consolidar algumas instruções básicas para isso)
Shog9
9

Uma maneira compacta de fazer isso pode ser:

make foo && ./$_

É bom ter um one-liner para que você possa executar novamente o seu executável facilmente novamente.

markthethomas
fonte
8

Supondo que o diretório atual não esteja no caminho, a sintaxe está ./[name of the program].

Por exemplo ./a.out

PA
fonte
2
Bom para você! O ponto e a barra estão lá porque, em muitos sistemas, o diretório atual ("." Nos termos do Unix) não faz parte do caminho pesquisado pelo shell. Assim, a adição torna explícito o programa que você deseja executar.
descontraia
7

Adicione o seguinte para obter os melhores avisos, você não se arrependerá. Se você puder, compile o WISE (aviso de erro)

- Wall -pedantic -Weffc++ -Werror
Nazgob
fonte
Realmente deve ser o padrão.
Konrad Rudolph
6

Para compilar programas C ou C ++, existe um comando comum:

  1. make filename

  2. ./filename

O make criará seu arquivo de origem em um arquivo executável com o mesmo nome. Mas se você quiser usar o caminho padrão, poderá usar o compilador gcc para criar programas em C & g ++ para c ++

Para C:

gcc filename.c

./a.out

Para C ++:

g++ filename.cpp

./a.out
Yogesh Nogia
fonte
2

Use a makefile. Mesmo para projetos muito pequenos (= um arquivo), o esforço provavelmente vale a pena, porque você pode ter vários conjuntos de configurações do compilador para testar as coisas. Depuração e implantação funcionam muito mais fácil dessa maneira.

Leia o makemanual , parece bastante longo à primeira vista, mas na maioria das seções você pode simplesmente dar uma olhada. Ao todo, levei algumas horas e me tornou muito mais produtivo.

Konrad Rudolph
fonte
Obrigado, essa é uma boa resposta também. Eu realmente tento usar o make o mais rápido possível e isso também é uma razão para eu esquecer a sintaxe da maneira "fácil".
PA
2

basta entrar no diretório em que está o seu arquivo c / cpp.

para compilar e executar o código c.

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

para compilar e executar o código c ++.

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

"$" é o símbolo padrão do terminal mac

Shiv Prakash
fonte
2

Para compilar e executar um código-fonte cpp no ​​terminal Mac, é necessário fazer o seguinte:

  1. Se o caminho do arquivo cpp for somePath / fileName.cpp, primeiro acesse o diretório com o caminho somePath
  2. Para compilar fileName.cpp, digite c ++ fileName.cpp -o fileName
  3. Para executar o programa, digite ./fileName
Alper Gur
fonte
0

A execução de um arquivo .C usando o terminal é um processo de duas etapas. A primeira etapa é digitar gcc no terminal, soltar o arquivo .C no terminal e pressionar Enter:

username$ gcc /Desktop/test.c 

Na segunda etapa, execute o seguinte comando:

username$ ~/a.out
Himanshu Mahajan
fonte
0

Para executar arquivos c ++, execute o comando abaixo, Assumindo que o nome do arquivo seja "main.cpp"

1.Compile para criar um arquivo de objeto a partir do arquivo c ++.

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

2.Como #include <conio.h>não suporta no MacOS, devemos usar sua alternativa que suporta no Mac #include <curses.h>. Agora, o arquivo de objeto precisa ser convertido em arquivo executável. Para usar curses.h, temos que usar a biblioteca -lcurses.

g++ -o main main.o -lcurses

3.Agora execute o executável.

./main
Teena nath Paul
fonte