Как скомпилировать и запустить C / C ++ в консоли Unix / Mac?

143

Как я могу скомпилировать / запустить C или C ++ в консоли Unix или терминале Mac?

(Я знаю это, забудь об этом и заново изучи. Время записать.)

Пенсильвания
источник

Ответы:

188

Если это простая программа с одним исходным кодом:

make foo

где исходный файл - foo.c или foo.cpp и т. д.

Вам даже не нужен make-файл. Make имеет достаточно встроенных правил для сборки вашего исходного файла в исполняемый файл с тем же именем, за исключением расширения.

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

Итак, чтобы запустить встроенный исполняемый файл foo:

./foo
CAMH
источник
Я не понял, встроенные правила распространяются на цели, указанные при вызове make. Узнал что-то новое сегодня =)
Бранан
«-bash: make: команда не найдена» <- Вам необходимо загрузить инструмент разработчика и дополнительные компоненты.
dgig
17
Это не так make main.cpp, но make main.
Крейг МакМахон
@CraigMcMahon Спасибо за ваш вклад!
Хлавулека MAS
Узнал что-то новое, это здорово!
FossilizedCarlos
112
gcc main.cpp -o main.out  
./main.out
Андрей Неверов
источник
31
как нуб, у меня было так много горя, что я не включил "./" во время исполнения
фанк-шун
2
@ funk-shun Я хотел бы, чтобы ваш комментарий был лучшим результатом при поиске такого рода вещей - мне потребовалось навсегда, чтобы понять это (для моего mac) - Спасибо!
Кори В.
10
Я использовал "gcc main.cpp -o main.out" и получаю эту ошибку, неопределенные символы для архитектуры x86_64: "std :: __ 1 :: locale :: use_facet (std :: __ 1 :: locale :: id &) const" ... оказывается, причина в том, что gcc default-links - это libc. при использовании g ++ свяжется с libstdc ++. Так что лучше использовать g ++ main.cpp -o main.out.
Рэйчел
1
@ Рейчел У меня тоже была такая же проблема.
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
Komengem
источник
1
Это то, что сработало для меня. Я попробовал другие решения выше без удачи. Спасибо!
nmrichards
работал для меня, не нужно ничего устанавливать, идеальное решение.
Чандер Шахер Гхорела - Гуру
33

Два шага для меня:

первый:

make foo

затем:

./foo
Виктор Аугусто
источник
1
./fooне знаю, как принятый ответ не имеет этой важной команды
Сухайб
@Suhaib У моего принятого ответа не было этой команды, потому что оригинальный вопрос не просил об этом. Он был озаглавлен «Как запустить C / C ++ в консоли Unix / Mac» - что я интерпретирую как «Как запустить компилятор c / c ++». Название было впоследствии изменено на «скомпилировать и запустить». Я обновил свой ответ, чтобы отразить измененный вопрос.
Camh
15

Выполнение всех приложений в среде Unix (Linux, Mac OS X, AIX и т. Д.) Зависит от пути поиска исполняемого файла.

Вы можете отобразить этот путь в терминале с помощью этой команды:

echo $ PATH

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

/ USR / бен: / бен: / USR / SBIN: / SBIN: / USR / местные / бен: / USR / X11 / бен

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

cat mytextfile.txt

Это запускает /bin/catи отображает mytextfile.txt на терминал.

Для запуска любой другой команды, которой нет в пути поиска исполняемого файла, необходимо указать путь к исполняемому файлу. Допустим, в моем домашнем каталоге на Mac OS X есть исполняемый файл MyProgram, который можно полностью квалифицировать следующим образом:

/ Users / оливер / MyProgram

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

MyProject / MyProgram

Или, скажем, я был в каталоге, /Users/oliver/MyProject2и я хотел выполнить, /Users/oliver/MyProject/MyProgramя могу использовать относительный путь, как это, чтобы выполнить его:

../MyProject/MyProgram

Точно так же, если я нахожусь в той же директории, где MyProgramмне нужно использовать относительный путь «текущей директории». Текущий каталог, в котором вы находитесь, - это точка, за которой следует косая черта. Например:

./MyProgram

Чтобы определить, в каком каталоге вы сейчас находитесь, используйте pwdкоманду.

Если вы обычно размещаете программы на жестком диске, которые вы хотите запускать без указания их имен. Например, если в вашем домашнем каталоге есть каталог «bin» для регулярно используемых сценариев оболочки других программ, может быть целесообразно изменить путь поиска исполняемого файла.

Это можно легко сделать путем создания или редактирования существующего .bash_profileфайла в вашем домашнем каталоге и добавления строк:

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

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

export PATH=~/bin:$PATH
ORJ
источник
Если вы добавите комментарии от «onebyone.livejournal.com» к моему собственному ответу о безопасности, этот ответ будет полным. Спасибо.
PA
10

Райан, я изменяю это, чтобы быть ответом вместо комментария, так как кажется, что я был слишком кратким. Сделайте все это в «Терминале».

Чтобы использовать компилятор G ++, вам нужно сделать это:

  1. Перейдите в каталог, в котором вы сохранили файл * .cpp.

    cd ~/programs/myprograms/
    (~ это ярлык для вашего дома, то есть / Users / Ryan / Programs / MyPrograms /, замените на место, которое вы фактически использовали.)

  2. Скомпилируйте это

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

    Не должно быть НИЧЕГО возвращено, если это было успешно, и это хорошо . Как правило, вы получаете возврат отказов.

    Однако, если вы напечатаете ls, вы увидите список файлов в том же каталоге. Например, вы увидите другие папки, input.cpp и output.bin

  3. Изнутри каталога, теперь выполните его с ./outbut.bin

nerdwaller
источник
Спасибо, это сработало. Вы знаете какие-нибудь учебники, которые объясняют эти вещи? Например, что означает G ++, что такое переключатель «o» и что еще может появиться?
Райан
добавить комментарий о не makeбудет работать, потому что нет make-файла.
Райан, вы можете набрать «man g ++» в терминале, чтобы получить «справочные страницы» (то есть руководства, которые, как я предполагаю, встроила Apple). Я не видел ни одного замечательного учебника. Тем не менее, справочная страница на g ++ может быть довольно глубокой с CFLAGS и всевозможными дополнительными опциями компиляции.
nerdwaller
Nitpick: «Там должно быть НИЧЕГО [напечатано], если оно прошло успешно, и это нормально. Обычно вы получаете [выходные данные] при сбоях». Всегда будет возвращаемое значение, 0 при успехе, не 0 при ошибке.
сентября
Объединять от stackoverflow.com/questions/13714436/... (пытается консолидировать некоторые основные инструкции для этого)
Shog9
9

Компактный способ сделать это может быть:

make foo && ./$_

Приятно иметь однострочную версию, так что вы можете просто перезапустить свой исполняемый файл снова легко.

markthethomas
источник
8

Предполагая, что текущий каталог не в пути, синтаксис ./[name of the program].

Например ./a.out

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

Добавьте следующие, чтобы получить лучшие предупреждения, вы не пожалеете об этом. Если вы можете, скомпилируйте WISE (предупреждение об ошибке)

- Wall -pedantic -Weffc++ -Werror
Nazgob
источник
Должно быть по умолчанию.
Конрад Рудольф
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

Использовать makefile . Даже для очень небольших (= однофайловых) проектов усилия, вероятно, того стоят, потому что вы можете иметь несколько наборов настроек компилятора для тестирования. Таким образом, отладка и развертывание работают намного проще.

Прочтите makeруководство , оно кажется довольно длинным на первый взгляд, но большинство разделов вы можете просто просмотреть. В общем, это заняло у меня несколько часов и сделало меня гораздо более продуктивным.

Конрад Рудольф
источник
Спасибо, это тоже хороший ответ. Я действительно стараюсь использовать make настолько, насколько это возможно, и это также является причиной того, что я забыл синтаксис «легкого» способа.
PA
2

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

для компиляции и запуска кода c.

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

для компиляции и запуска кода на C ++.

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

$ является символом терминала Mac по умолчанию

Шив Пракаш
источник
2

Чтобы скомпилировать и запустить исходный код cpp из терминала Mac, необходимо выполнить следующие действия:

  1. Если путь к файлу cpp - somePath / 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. Скомпилируйте файл объекта из файла C ++.

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

2. Поскольку #include <conio.h>не поддерживается в MacOS, поэтому мы должны использовать его альтернативу, которая поддерживается в Mac #include <curses.h>. Теперь объектный файл необходимо преобразовать в исполняемый файл. Чтобы использовать curses.hмы должны использовать библиотеку -lcurses.

g++ -o main main.o -lcurses

3. Теперь запустите исполняемый файл.

./main
Тина Нат Пол
источник