Jak skompilować i uruchomić C / C ++ w konsoli Unix / terminalu Mac?

143

Jak mogę skompilować / uruchomić C lub C ++ w konsoli Unix lub terminalu Mac?

(Wiem o tym, zapomnij o tym i naucz się ponownie. Czas to zapisać.)

ROCZNIE
źródło

Odpowiedzi:

188

Jeśli jest to prosty program z jednego źródła:

make foo

gdzie plik źródłowy to foo.c lub foo.cpp itp.

Nie potrzebujesz nawet pliku makefile. Make ma wystarczającą liczbę wbudowanych reguł, aby zbudować plik źródłowy w pliku wykonywalnym o tej samej nazwie, bez rozszerzenia.

Uruchomienie właśnie zbudowanego pliku wykonywalnego jest tym samym, co uruchomienie dowolnego programu - ale najczęściej będziesz musiał określić ścieżkę do pliku wykonywalnego, ponieważ powłoka będzie przeszukiwać tylko to, co jest, $PATHaby znaleźć pliki wykonywalne i najczęściej nie obejmuje to bieżącego katalogu ( .).

Aby więc uruchomić zbudowany plik wykonywalny foo:

./foo
camh
źródło
Nie zdawałem sobie sprawy z wbudowanych reguł propagowanych do celów określonych podczas wywoływania make. Nauczyłem się czegoś nowego dzisiaj =)
Branan
„-bash: make: command not found” <- Musisz mieć narzędzie programistyczne i pobrane dodatkowe składniki.
dgig
17
Nie jest make main.cpp, ale make main.
Craig McMahon
@CraigMcMahon Dzięki za wkład!
Hlawuleka MAS
Nauczyłem się czegoś nowego, to jest świetne!
FossilizedCarlos
112
gcc main.cpp -o main.out  
./main.out
Andrey Neverov
źródło
31
jako noob miałem tyle żalu, że nie włączyłem „./” podczas wykonywania
funk-shun
2
@ funk-shun Chciałbym, żeby twój komentarz był najlepszym wynikiem podczas wyszukiwania tego typu rzeczy w Google - zajęło mi to wieczność (dla mojego Maca) - Dzięki!
Cory W.
10
Użyłem "gcc main.cpp -o main.out" i otrzymałem ten błąd, niezdefiniowane symbole dla architektury x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... okazuje się, że powodem jest to, że gcc default-links to libc. podczas używania g ++ połączy się z libstdc ++. Więc użyj "g ++ main.cpp -o main.out" może być lepsze.
Rachel
1
@Rachel Ja też doświadczyłem tego samego problemu.
Goldname
1
Co do Undefined symbols for architecture x86_64 sprawy, modyfikuję polecenie w następujący sposób: gcc -lstdc++ main.cpp -o main.outi to działa na moim Macu. przez link: stackoverflow.com/questions/11852568/…
rotoava
69

To jest polecenie, które działa na wszystkich komputerach Unix ... Używam go na Linuksie / Ubuntu, ale działa również w OS X. Wpisz następujące polecenie w Terminal.app .

$ g++ -o lab21 iterative.cpp

-o to litera O, a nie zero

lab21 będzie twoim plikiem wykonywalnym

iterative.cpp to Twój plik C ++

Po uruchomieniu tego polecenia wpisz następujące polecenie w terminalu, aby uruchomić program:

$ ./lab21
Komengem
źródło
1
To właśnie zadziałało dla mnie. Wypróbowałem inne rozwiązania powyżej bez powodzenia. Dzięki!
nmrichards
u mnie też zadziałało, nie trzeba niczego instalować, rozwiązanie idealne.
Chander Shakher Ghorela - Guru
33

Dwa kroki dla mnie:

pierwszy:

make foo

następnie:

./foo
Victor Augusto
źródło
1
./foonie wiem, jak zaakceptowana odpowiedź nie zawiera tego ważnego elementu polecenia
Suhaib
@Suhaib Moja zaakceptowana odpowiedź nie zawierała tego polecenia, ponieważ pierwotne pytanie o to nie pytało. Był zatytułowany „Jak uruchomić C / C ++ na konsoli Unix / terminalu Mac” - co interpretuję jako „Jak uruchomić kompilator c / c ++”. Tytuł został następnie zmieniony na „kompiluj i uruchamiaj”. Zaktualizowałem odpowiedź, aby odzwierciedlić zmienione pytanie.
camh
15

Wszystkie działania aplikacji w środowisku Unix (Linux, Mac OS X, AIX itp.) Zależą od wykonywalnej ścieżki wyszukiwania.

Możesz wyświetlić tę ścieżkę w terminalu za pomocą tego polecenia:

echo $ PATH

W systemie Mac OS X (domyślnie) spowoduje to wyświetlenie następującej ścieżki wyszukiwania oddzielonej dwukropkami:

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

Tak więc każdy plik wykonywalny w wymienionych katalogach można uruchomić po prostu wpisując jego nazwę. Na przykład:

cat mytextfile.txt

To działa /bin/cat i wyświetla mytextfile.txt na terminalu.

Aby uruchomić jakiekolwiek inne polecenie, które nie znajduje się na ścieżce wyszukiwania pliku wykonywalnego, należy określić ścieżkę do pliku wykonywalnego. Powiedzmy, że mam plik wykonywalny o nazwie MyProgram w moim katalogu domowym na Mac OS XI, który może go w pełni zakwalifikować w następujący sposób:

/ Users / oliver / MyProgram

Jeśli znajdujesz się w pobliżu programu, który chciałeś wykonać, możesz określić nazwę za pomocą częściowej ścieżki. Na przykład, jeśli MyProgramznajdowałem się w katalogu, który /Users/oliver/MyProjectja i ja byłem w moim katalogu domowym, mogę określić nazwę pliku wykonywalnego w ten sposób i zlecić wykonanie:

MyProject / MyProgram

Lub powiedz, że byłem w katalogu /Users/oliver/MyProject2i chciałem wykonać /Users/oliver/MyProject/MyProgram, mogę użyć ścieżki względnej takiej jak ta, aby ją wykonać:

../MyProject/MyProgram

Podobnie, jeśli znajduję się w tym samym katalogu, w którym MyProgrammuszę użyć ścieżki względnej „katalogu bieżącego”. Bieżący katalog, w którym się znajdujesz, to kropka, po której następuje ukośnik. Na przykład:

./MyProgram

Aby określić, który katalog jest obecnie używany, plik pwd polecenia.

Jeśli często umieszczasz programy w miejscu na dysku twardym, które chcesz uruchamiać, bez konieczności kwalifikowania ich nazw. Na przykład, jeśli masz katalog „bin” w swoim katalogu domowym dla regularnie używanych skryptów powłoki innych programów, rozsądnie może być zmiana ścieżki wyszukiwania plików wykonywalnych.

Można to łatwo zrobić, tworząc lub edytując istniejący .bash_profileplik w katalogu domowym i dodając wiersze:

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

Tutaj znak tyldy (~) jest używany jako skrót dla / Users / oliver. Zauważ również, że linia hash bang (#!) Musi być pierwszą linią pliku (jeśli jeszcze nie istnieje). Zwróć również uwagę, że ta technika wymaga, aby powłoka logowania była bash (domyślna w systemie Mac OS X i większości dystrybucji Linuksa). Należy również pamiętać, że jeśli chcesz, aby Twoje programy zainstalowane w programie ~/binbyły używane zamiast plików wykonywalnych systemu, należy zmienić kolejność instrukcji eksportu w następujący sposób:

export PATH=~/bin:$PATH
orj
źródło
Jeśli dodasz komentarze z „onebyone.livejournal.com” pod moją własną odpowiedzią dotyczącą bezpieczeństwa, ta odpowiedź jest kompletna. Dziękuję Ci.
PA
10

Ryan, zmieniam to tak, aby była odpowiedzią zamiast komentarza, ponieważ wygląda na to, że byłam zbyt krótka. Zrób to wszystko w „Terminalu”.

Aby użyć kompilatora G ++, musisz zrobić to:

  1. Przejdź do katalogu, w którym zapisałeś plik * .cpp.

    cd ~/programs/myprograms/
    (~ to skrót do twojego domu, np. / Users / Ryan / Programs / myprograms /, zamień na lokalizację, z której faktycznie korzystałeś).

  2. Skompiluj to

    g++ input.cpp -o output.bin (output.bin może być wszystkim z dowolnym rozszerzeniem, tak naprawdę. bin jest po prostu powszechny na unixach).

    Jeśli się powiedzie, NIC nie powinno zostać zwrócone i to jest w porządku . Generalnie otrzymujesz zwroty w przypadku awarii.

    Jeśli jednak wpiszesz ls , zobaczysz listę plików w tym samym katalogu. Na przykład zobaczysz inne foldery, input.cpp i output.bin

  3. Z wnętrza katalogu uruchom go teraz za pomocą ./outbut.bin

nerdwaller
źródło
Dzięki, to zadziałało. Czy znasz jakieś samouczki, które wyjaśniają te rzeczy? Na przykład, co dokładnie oznacza G ++, czym jest przełącznik „o” i cokolwiek innego, co może się pojawić?
Ryan
dodaj komentarz o makenie zadziała, ponieważ nie ma pliku makefile.
Ryan, możesz wpisać „man g ++” w terminalu, aby uzyskać „strony podręcznika” (tj. Podręczniki, które, jak sądzę, ma wbudowane w Apple). Nie widziałem jednak żadnych świetnych tutoriali. Chociaż strona podręcznika systemowego g ++ może być całkiem dogłębna dzięki CFLAGS i wszelkiego rodzaju zaawansowanym opcjom kompilacji.
nerdwaller
Nitpick: "Nie powinno być NIC [wydrukowanego], jeśli się powiodło, i to jest w porządku. Zwykle otrzymujesz [wynik] w przypadku awarii." Zawsze będzie zwracana wartość, 0 w przypadku sukcesu, różna od 0 w przypadku niepowodzenia.
wrzesień
Scalono ze stackoverflow.com/questions/13714436/… (próbując skonsolidować kilka podstawowych instrukcji)
Shog9,
9

Kompaktowym sposobem na zrobienie tego może być:

make foo && ./$_

Miło jest mieć jednolinijkowy plik, dzięki czemu można łatwo ponownie uruchomić plik wykonywalny.

markthethomas
źródło
8

Zakładając, że bieżący katalog nie znajduje się w ścieżce, składnia to ./[name of the program] .

Na przykład ./a.out

ROCZNIE
źródło
2
Dobrze dla ciebie! Kropka i ukośnik są tam, ponieważ w wielu systemach bieżący katalog („.” W terminologii uniksowej) nie jest częścią ścieżki przeszukiwanej przez powłokę. Dlatego dodanie go wyraźnie określa, który program chcesz uruchomić.
odpoczynek
7

Dodaj następujące, aby uzyskać najlepsze ostrzeżenia, nie pożałujesz. Jeśli możesz, skompiluj WISE (ostrzeżenie to błąd)

- Wall -pedantic -Weffc++ -Werror
Nazgob
źródło
Powinien być naprawdę domyślny.
Konrad Rudolph
6

Aby skompilować programy w C lub C ++, istnieje wspólne polecenie:

  1. make filename

  2. ./filename

make zbuduje plik źródłowy w plik wykonywalny o tej samej nazwie. Ale jeśli chcesz użyć standardowego sposobu, możesz użyć kompilatora gcc do zbudowania programów w C & g ++ dla c ++

Dla C:

gcc filename.c

./a.out

Dla C ++:

g++ filename.cpp

./a.out
Yogesh Nogia
źródło
2

Użyć makefile . Nawet w przypadku bardzo małych (= jednoplikowych) projektów wysiłek jest prawdopodobnie tego wart, ponieważ możesz mieć kilka zestawów ustawień kompilatora do testowania. W ten sposób debugowanie i wdrażanie działa znacznie łatwiej.

Przeczytaj makeinstrukcję , na pierwszy rzut oka wydaje się dość długa, ale większość sekcji można po prostu przejrzeć. W sumie zajęło mi to kilka godzin i znacznie zwiększyło produktywność.

Konrad Rudolph
źródło
Dziękuję, to też dobra odpowiedź. Naprawdę staram się używać make najlepiej jak potrafię i jest to również powód, dla którego zapominam o składni „łatwego” sposobu.
PA
2

po prostu wejdź do katalogu, w którym znajduje się twój plik c / cpp.

do kompilowania i uruchamiania kodu C.

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

do kompilowania i uruchamiania kodu C ++.

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

„$” jest domyślnym symbolem terminala Mac

Shiv Prakash
źródło
2

Aby skompilować i uruchomić kod źródłowy cpp z terminala Mac, należy wykonać następujące czynności:

  1. Jeśli ścieżka do pliku CPP to jakaśŚcieżka / nazwa_pliku.cpp, najpierw przejdź do katalogu ze ścieżką jakaśŚcieżka
  2. Aby skompilować nazwa_pliku.cpp, wpisz c ++ nazwa_pliku.cpp -o nazwa_pliku
  3. Aby uruchomić program, wpisz ./fileName
Alper Gur
źródło
0

Uruchamianie pliku .C za pomocą terminala to proces dwuetapowy. Pierwszym krokiem jest wpisanie gcc w terminalu i upuszczenie pliku .C na terminal, a następnie wciśnięcie Enter:

username$ gcc /Desktop/test.c 

W drugim kroku uruchom następujące polecenie:

username$ ~/a.out
Himanshu Mahajan
źródło
0

Aby uruchomić pliki C ++, uruchom poniższe polecenie, zakładając, że nazwa pliku to „main.cpp”

1.Kompiluj, aby utworzyć plik obiektowy z pliku C ++.

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

Ponieważ #include <conio.h>nie obsługuje systemu MacOS, powinniśmy użyć jego alternatywy, która obsługuje to w systemie Mac #include <curses.h>. Teraz plik obiektowy musi zostać przekonwertowany na plik wykonywalny. Aby skorzystać, curses.hmusimy skorzystać z biblioteki -lcurses.

g++ -o main main.o -lcurses

3. Teraz uruchom plik wykonywalny.

./main
Teena nath Paul
źródło