如何在Unix控制台/ Mac终端中编译和运行C / C ++?


143

如何在Unix控制台或Mac终端中编译/运行C或C ++?

(我知道,忘记了,然后重新学习。该写下来了。)

Answers:


188

如果它是一个简单的单一源程序:

make foo

源文件是foo.c或foo.cpp等。

您甚至不需要makefile。Make具有足够的内置规则,可将您的源文件构建为具有相同名称(减去扩展名)的可执行文件。

运行刚刚构建的可执行文件与运行任何程序相同-但是您通常需要指定可执行文件的路径,因为外壳程序只会搜索其中的内容$PATH以查找可执行文件,并且通常不包含当前目录(.)。

因此,要运行生成的可执行文件foo

./foo

我没有意识到内置规则会传播到调用make时指定的目标。今天学到了新的东西=)
Branan

“ -bash:制作:找不到命令” <-您必须下载开发人员工具和其他组件。
dgig 2014年

17
不是make main.cpp,但是make main
Craig McMahon 2015年

@CraigMcMahon感谢您的输入!
Hlawuleka MAS

学到新东西,太好了!
FossilizedCarlos

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

31
作为菜鸟,我为执行时不包括“ ./”而感到非常悲伤
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 default-links是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 字母O不为零

lab21 将是您的可执行文件

iterative.cpp 是您的C ++文件

运行该命令后,在终端中键入以下内容以运行程序:

$ ./lab21

1
这对我有用。我没有运气尝试了上面的其他解决方案。谢谢!
nmrichards

也为我工作,不需要安装任何东西,完美的解决方案。
Chander Shakher Ghorela-大师

33

对我来说有两个步骤:

第一:

make foo

然后:

./foo

1
./foodunno如何接受的答案没有这个重要的命令
Suhaib

@Suhaib我接受的答案没有该命令,因为原始问题没有要求。标题为“如何在Unix控制台/ Mac终端中运行C / C ++”-我将其解释为“如何运行c / c ++编译器”。标题随后更改为“编译并运行”。我已经更新了答案,以反映已更改的问题。
卡姆(Camh)

15

在Unix(Linux,Mac OS X,AIX等)环境中,所有应用程序的执行都取决于可执行文件的搜索路径。

您可以使用以下命令在终端中显示此路径:

回声$ 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的可执行文件,可以像这样完全限定它:

/ Users / oliver / MyProgram

如果您位于希望执行的程序附近,则可以使用部分路径来限定名称。例如,如果MyProgram位于目录/Users/oliver/MyProjectI中,而我位于主目录中,则可以这样定义可执行文件名称,并使其执行:

我的项目/我的程序

或者说我在目录中/Users/oliver/MyProject2并且想要执行,/Users/oliver/MyProject/MyProgram我可以使用这样的相对路径来执行它:

../MyProject/MyProgram

同样,如果我与MyProgram我需要使用“当前目录”相对路径位于同一目录中。您当前所在的目录是句点字符,后跟斜杠。例如:

./MyProgram

要确定您当前正在使用哪个目录,请使用pwd命令。

如果通常将程序放在硬盘上您希望运行的位置,而不必限定其名称。例如,如果您的主目录中有一个“ bin”目录,用于存放其他程序的定期使用的shell脚本,那么更改可执行搜索路径可能是明智的。

通过.bash_profile在主目录中创建或编辑现有文件并添加以下行,可以轻松实现此目的:

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

在这里,代字号(〜)用作/ Users / oliver的快捷方式。另请注意,哈希爆炸(#!)行必须是文件的第一行(如果尚不存在)。还要注意,此技术要求您的登录外壳为bash(Mac OS X和大多数Linux发行版的默认外壳)。还请注意,如果您希望安装的程序~/bin优先于系统可执行文件使用,则应按以下方式对导出语句重新排序:

export PATH=~/bin:$PATH

如果您将“ 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


谢谢你的工作。您是否会知道任何可以解释这些内容的教程?就像G ++的确切含义一样,“ o”开关是什么以及可能出现的其他任何问题?
瑞安

添加有关make不会工作的注释,因为没有makefile。

瑞安,您可以在终端中键入“ man g ++”以获取“手册页”(即手册,我猜苹果公司已经嵌入了手册)。我还没有看过任何很棒的教程。虽然,g ++的手册页可能会使用CFLAGS和各种高级编译选项进行更深入的介绍。
nerdwaller 2012年

Nitpick:“如果成功,应该没有什么[打印],这没关系。通常,失败时您会获得[输出]。” 总会有一个返回值,成功时返回0,失败时返回非0。
sepp2k 2012年

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 ++ for 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

为了从Mac终端编译并运行cpp源代码,需要执行以下操作:

  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我们必须使用library -lcurses

g++ -o main main.o -lcurses

3.现在运行可执行文件。

./main
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.