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ć.)

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

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

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

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

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

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


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.


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


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

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

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ść.


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


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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.