Як компілювати та запускати C / C ++ у консолі Unix / Mac термінал?


143

Як я можу компілювати / запустити C або C ++ у консолі Unix або терміналі Mac?

(Я знаю це, забудь це і знову вивчи його. Час його записати.)

Відповіді:


188

Якщо це проста програма з єдиним джерелом:

make foo

де вихідним файлом є foo.c або foo.cpp тощо.

Вам навіть не потрібен makefile. Make має достатньо вбудованих правил, щоб створити вихідний файл у однойменному виконуваному файлі, мінус розширення.

Запуск щойно створеного виконуваного файлу - це те саме, що і для запуску будь-якої програми, але найчастіше вам потрібно буде вказати шлях до виконуваного файлу, оскільки оболонка буде шукати лише те, що є, $PATHщоб знайти виконувану програму, і найчастіше, що не включає поточний каталог ( .).

Отже, для запуску вбудованого виконуваного файлу foo:

./foo

Я не усвідомлював вбудованих правил, поширюваних на цілі, визначені при виклику make. Дізнався чогось нового сьогодні =)
Бран

"-bash: make: команда не знайдена" <- У вас повинен бути завантажений інструмент розробника та додаткові компоненти.
дег

17
Це не так make main.cpp, але make main.
Крейг Макмахон

@CraigMcMahon Дякуємо за ваш внесок!
Hlawuleka MAS

Дізналися чогось нового, це чудово!
FossilizedCarlos

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

31
як noob у мене було стільки горя за те, що я не включав "./" під час виконання
funk-shun

2
@ funk-shun Я хотів би, щоб ваш коментар став найкращим результатом, коли гуглити подібні речі - мені довелося назавжди зрозуміти це (для мого Mac) - Дякую!
Cory W.

10
Я використав "gcc main.cpp -o main.out", і отримаю цю помилку. Невизначені символи для архітектури x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" , ... виявляється, причина полягає в тому, що gcc за замовчуванням-посиланнями є libc. при використанні g ++ буде зв’язуватися з libstdc ++. Тому використання "g ++ main.cpp -o main.out" може бути краще.
Рейчел

1
@Rachel Я також відчував ту ж проблему.
Goldname

1
Щодо Undefined symbols for architecture x86_64 проблеми, я змінюю команду наступним чином:, gcc -lstdc++ main.cpp -o main.outі це працює на моєму Mac. за посиланням: stackoverflow.com/questions/11852568 / ...
rotoava

69

Це команда, яка працює на всіх машинах Unix ... Я використовую її на Linux / Ubuntu, але вона працює і в OS X. Введіть таку команду в Terminal.app .

$ g++ -o lab21 iterative.cpp

-o - літера О не нульова

lab21 буде вашим виконуваним файлом

iterative.cpp ваш файл c ++

Після запуску цієї команди в терміналі введіть наступне:

$ ./lab21

1
Це те, що працювало для мене. Я спробував інші рішення вище без удачі. Дякую!
nmrichards

працював і для мене, не потрібно нічого встановлювати, ідеальне рішення.
Чандер Шахер Горела - Гуру

33

Два кроки для мене:

перший:

make foo

тоді:

./foo

1
./fooне знаю, як прийнята відповідь не має цієї важливої ​​команди
Suhaib

@Suhaib У моїй прийнятій відповіді не було цієї команди, тому що в оригінальному запитанні його не було. Вона мала назву "Як запустити C / C ++ в консолі Unix / Mac", що я трактую як "Як запустити компілятор c / c ++". Згодом назву було змінено на "компілювати та запустити". Я оновив свою відповідь, щоб відобразити змінене запитання.
camh

15

Все виконання програми в середовищі Unix (Linux, Mac OS X, AIX тощо) залежить від виконуваного шляху пошуку.

Ви можете відобразити цей шлях у терміналі за допомогою цієї команди:

echo $ PATH

У Mac OS X (за замовчуванням) відображатиметься наступний шлях, відокремлений двокрапкою:

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

Тож будь-який виконуваний файл у перелічених каталогах можна запустити, просто ввівши їх ім’я. Наприклад:

кішка mytextfile.txt

Це запускається /bin/catта відображає mytextfile.txt до терміналу.

Для запуску будь-якої іншої команди, яка не знаходиться у виконуваному шляху пошуку, потрібно кваліфікувати шлях до виконуваного файлу. Так що скажіть, у мене в моєму домашньому каталозі на Mac OS XI був виконаний файл з назвою MyProgram, і його можна повністю кваліфікувати так:

/ Користувачі / oliver / MyProgram

Якщо ви знаходитесь у місці, яке знаходиться поруч із програмою, яку ви хотіли виконати, ви можете визначити ім'я за допомогою часткового шляху. Наприклад, якщо я MyProgramзнаходився в каталозі /Users/oliver/MyProjectI, і я був у своєму домашньому каталозі, я можу кваліфікувати ім'я виконавця, як це, і дозволити його виконувати:

MyProject / MyProgram

Або скажіть, що я був у каталозі, /Users/oliver/MyProject2і я хотів виконати, /Users/oliver/MyProject/MyProgramя можу використовувати відносний шлях, як цей, для його виконання:

../MyProject/MyProgram

Аналогічно, якщо я перебуваю в тому самому каталозі, як MyProgramмені потрібно використовувати відносний шлях "поточного каталогу". Поточний каталог, в якому ви перебуваєте, є символом періоду, за яким слід нахил. Наприклад:

./MyProgram

Щоб визначити, в якому каталозі ви зараз використовуєте pwdкоманду.

Якщо ви зазвичай ставите програми на місце на своєму жорсткому диску, яке ви хочете запустити, не вимагаючи кваліфікувати їх імена. Наприклад, якщо у вашому домашньому каталозі є каталог "бін" для регулярно використовуваних скриптів оболонки інших програм, можливо, буде доцільно змінити ваш виконавчий шлях пошуку.

Це легко зробити, створивши або відредагувавши наявний .bash_profileфайл у домашній директорії та додавши рядки:

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

Тут символ tilde (~) використовується як ярлик для / Users / oliver. Також зауважте, що рядок хеш-бангу (#!) Повинен бути першим рядком файлу (якщо він ще не існує). Зауважте також, що ця методика вимагає, щоб ваша оболонка входу була bash (за замовчуванням у Mac OS X та більшості дистрибутивів Linux). Також зауважте, що якщо ви хочете, щоб ваші програми, встановлені в програмі, ~/binвикористовували перевагу перед системними виконуваними файлами, вам слід змінити порядок експорту таким чином:

export PATH=~/bin:$PATH

Якщо ви додасте коментарі з "onebyone.livejournal.com" на мою власну відповідь щодо безпеки, ця відповідь завершена. Дякую.
ПА

10

Райан, я змінюю це як відповідь, а не коментар, оскільки, здається, я був занадто коротким. Робіть усе це в «Терміналі».

Щоб використовувати компілятор G ++, вам потрібно зробити це:

  1. Перейдіть до каталогу, в якому ви зберегли файл * .cpp.

    cd ~/programs/myprograms/
    (~ - це ярлик для вашого будинку, тобто / Користувачі / Ryan / програми / мої програми / замініть місцем, яке ви фактично використовували.)

  2. Складіть його

    g++ input.cpp -o output.bin (output.bin може бути будь-чим із будь-яким розширенням, насправді. bin просто загальний на unix.)

    Якщо НЕ МОЖАЛО повернутись, якщо це було успішно, і це нормально . Як правило, ви отримуєте віддачу від невдач.

    Однак якщо ви введете ls, ви побачите список файлів у тому самому каталозі. Наприклад, ви побачили б інші папки, input.cpp та output.bin

  3. Зсередини каталогу, тепер виконайте його ./outbut.bin


Спасибі це спрацювало. Чи траплялося б вам знати якісь підручники, які пояснювали б ці речі? Як, що саме означає G ++, що означає перемикач 'o' та все інше, що може з’явитися?
Райан

додати коментар щодо makeроботи над роботою, оскільки немає файлу.

Райан, ти можеш набрати "man g ++" в терміналі, щоб отримати "man pages" (тобто посібники, які я б здогадався, що Apple вбудувала). Я не бачив жодних чудових навчальних посібників. Незважаючи на те, що довідкова сторінка на g ++ може отримати досить глибокий вміст із CFLAGS та всілякими розширеними параметрами компіляції.
бовдур

Нітпік: "Якщо це було успішно, НІЧОГО не буде [надруковано], і це нормально. Як правило, ви отримуєте [вихід] на провали". Завжди буде значення повернення, 0 при успіху, не-0 при відмові.
sepp2k

Об’єднано з stackoverflow.com/questions/13714436/… (намагається закріпити деякі основні інструкції для цього)
Shog9,

9

Компактний спосіб зробити це може:

make foo && ./$_

Приємно мати один вкладиш, щоб ви могли просто легко запустити свій виконуваний файл знову.


8

Якщо припустити, що поточний каталог не стоїть на шляху, синтаксис є ./[name of the program].

Наприклад ./a.out


2
Добре вам! Точка і коса риса є, тому що в багатьох системах поточний каталог ("." В термінах Unix) не є частиною шляху пошуку за оболонкою. Таким чином, додаючи це робить явним, яку програму потрібно запустити.
розмотує

7

Додайте наступні, щоб отримати найкращі попередження, ви не пошкодуєте. Якщо можете, компілюйте WISE (попередження - помилка)

- Wall -pedantic -Weffc++ -Werror

Справді має бути дефолт.
Конрад Рудольф

6

Для компіляції програм C або C ++ існує загальна команда:

  1. make filename

  2. ./filename

make створить ваш вихідний файл у виконуваний файл з тим же ім'ям. Але якщо ви хочете використовувати стандартний спосіб, ви можете використовувати компілятор gcc для створення програм C і g ++ для c ++

Для C:

gcc filename.c

./a.out

Для C ++:

g++ filename.cpp

./a.out

2

Використовуйте a makefile. Навіть для дуже невеликих (= однофайлових) проектів, мабуть, цього варто, тому що для перевірки речей ви можете мати кілька наборів параметрів компілятора. Налагодження та розгортання працює набагато простіше.

Прочитайте makeпосібник , на перший погляд це здається досить довгим, але більшість розділів ви можете просто пропустити. Загалом це зайняло у мене кілька годин і зробило мене набагато продуктивнішою.


Дякую, і це хороша відповідь. Я дійсно намагаюсь зробити make як якомога більше, і це також є причиною того, що я забув синтаксис "легкого" способу.
ПА


2

просто введіть у каталог, у якому знаходиться ваш файл c / cpp.

для компіляції та запуску коду с.

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

для компіляції та запуску коду c ++.

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

"$" - символ терміналу mac за замовчуванням


2

Для компіляції та запуску вихідного коду cpp з терміналу Mac необхідно зробити наступне:

  1. Якщо шлях до файлу cpp є деякимPath / fileName.cpp, спершу перейдіть до каталогу з контуром somePath
  2. Для компіляції fileName.cpp введіть c ++ fileName.cpp -o fileName
  3. Для запуску програми введіть ./fileName

0

Запуск .C-файлу за допомогою терміналу - це двоетапний процес. Першим кроком є ​​введення gcc в термінал і опустити файл .C до терміналу, а потім натиснути Enter:

username$ gcc /Desktop/test.c 

На другому кроці запустіть таку команду:

username$ ~/a.out

0

Для запуску файлів c ++, запущених нижче команди, припустимо, що ім'я файлу - "main.cpp"

1.Compile, щоб зробити об’єктний файл із файлу c ++.

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

2.Since #include <conio.h>не підтримує MacOS, тому ми повинні використовувати його альтернативу, яка підтримує в Mac, що є #include <curses.h>. Тепер об’єктний файл потрібно перетворити на виконуваний файл. Для використання curses.hми повинні використовувати бібліотеку -lcurses.

g++ -o main main.o -lcurses

3. Тепер запустіть виконуваний файл.

./main
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.