Как скомпилировать и запустить C / C ++ в консоли Unix / Mac? - PullRequest
126 голосов
/ 21 октября 2008

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

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

Ответы [ 15 ]

168 голосов
/ 21 октября 2008

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

make foo

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

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

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

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

./foo
103 голосов
/ 21 октября 2008
gcc main.cpp -o main.out  
./main.out
65 голосов
/ 24 февраля 2011

Это команда, которая работает на всех машинах Unix ... Я использую ее в Linux / Ubuntu, но она работает и в OS X. Введите следующую команду в Terminal.app .

$ g++ -o lab21 iterative.cpp

-o это буква О не ноль

lab21 будет вашим исполняемым файлом

iterative.cpp это ваш файл C ++

После выполнения этой команды введите в терминале следующую команду для запуска вашей программы:

$ ./lab21
31 голосов
/ 28 июля 2014

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

первый:

make foo

, то:

./foo
15 голосов
/ 22 октября 2008

Выполнение всех приложений в среде 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/MyProject, а я был в моем домашнем каталоге, я могу определить имя исполняемого файла следующим образом и заставить его выполнить:

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
10 голосов
/ 05 декабря 2012

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

Чтобы использовать компилятор 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

8 голосов
/ 21 октября 2008

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

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

7 голосов
/ 14 января 2015

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

make foo && ./$_

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

7 голосов
/ 21 октября 2008

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

- Wall -pedantic -Weffc++ -Werror
5 голосов
/ 11 апреля 2018

Для компиляции программ на C или C ++ есть общая команда:

  1. make filename

  2. ./filename

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

Для C:

gcc filename.c

./a.out

Для C ++:

g++ filename.cpp

./a.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...