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

P-A*_*P-A 131 c c++ macos terminal console

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

(我知道,忘掉它,然后重新学习它.是时候把它写下来了.)

cam*_*amh 175

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

make foo
Run Code Online (Sandbox Code Playgroud)

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

你甚至不需要makefile.Make有足够的内置规则将源文件构建为同名的可执行文件,减去扩展名.

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

所以要运行构建的可执行文件foo:

./foo
Run Code Online (Sandbox Code Playgroud)

  • 它不是`make main.cpp`,而是`make main`. (12认同)
  • '对于main.cpp没什么可做的' (5认同)
  • @FabianAmran 它指的是当前目录。除非在运行程序时指定了路径,否则 shell 将只在 `$PATH` 环境变量中列出的目录中查找要执行的程序。出于安全原因,`.`(当前目录)通常不在`$PATH` 中。 (2认同)

And*_*rov 107

gcc main.cpp -o main.out  
./main.out
Run Code Online (Sandbox Code Playgroud)

  • 作为一个菜鸟我因为在执行时不包括"./"而感到非常悲伤 (28认同)
  • 我用"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"可能会更好. (9认同)
  • 关于```架构x86_64的未定义符号```问题,我修改命令如下:```gcc -lstdc++ main.cpp -o main.out```,这在我的Mac上有效。通过链接:/sf/ask/829679791/?lq=1 (4认同)
  • @ funk-shun我希望你的评论是谷歌搜索这种事情的最佳结果 - 带我永远想出来(对于我的mac) - 谢谢! (2认同)

Kom*_*gem 67

这是适用于所有Unix机器的命令......我在Linux/Ubuntu上使用它,但它也适用于OS X. 在Terminal.app中键入以下命令.

$ g++ -o lab21 iterative.cpp
Run Code Online (Sandbox Code Playgroud)

-o 字母O不是零

lab21 将是你的可执行文件

iterative.cpp 是你的c ++文件

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

$ ./lab21
Run Code Online (Sandbox Code Playgroud)


Vic*_*sto 32

对我来说有两个步骤:

第一:

make foo
Run Code Online (Sandbox Code Playgroud)

然后:

./foo
Run Code Online (Sandbox Code Playgroud)

  • 没有./foo没有被执行,谢谢 (2认同)

orj*_*orj 15

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

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

echo $ PATH

在Mac OS X上(默认情况下),这将显示以下冒号分隔的搜索路径:

在/ usr/bin中:/ bin中:/ usr/sbin目录:/ sbin目录:在/ usr/local/bin目录:在/ usr/X11/bin中

因此,列出的目录中的任何可执行文件都可以通过键入其名称来运行.例如:

cat mytextfile.txt

这将运行/bin/cat并显示mytextfile.txt到终端.

要运行不在可执行搜索路径中的任何其他命令,您需要限定可执行文件的路径.所以说我在Mac OS XI上的主目录中有一个名为MyProgram的可执行文件可以像这样完全限定它:

/用户/奥利弗/ MyProgram

如果您所在的位置靠近您希望执行的程序,则可以使用部分路径限定名称.例如,如果MyProgram/Users/oliver/MyProject我和我的主目录中的目录中,我可以像这样限定可执行文件名,并让它执行:

MyProject的/ MyProgram

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

../MyProject/MyProgram

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

./MyProgram

要确定您当前使用的目录,请使用该pwd命令.

如果您经常将程序放在硬盘上想要运行的位置而不必限定其名称.例如,如果您的主目录中有一个"bin"目录,用于其他程序的常用shell脚本,则更改可执行搜索路径可能是明智之举.

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

#!/bin/sh
export PATH=$PATH:~/bin
Run Code Online (Sandbox Code Playgroud)

这里,波浪号(〜)字符被用作/ Users/oliver的快捷方式.另请注意,hash bang(#!)行需要是文件的第一行(如果它尚不存在).另请注意,此技术要求您的登录shell为bash(Mac OS X和大多数Linux发行版的默认设置).另请注意,如果您希望安装的程序~/bin优先于系统可执行文件使用,则应按如下方式重新排序export语句:

export PATH=~/bin:$PATH
Run Code Online (Sandbox Code Playgroud)


ner*_*ler 10

瑞安,我正在改变这个问题而不是评论,因为看起来我太简短了.在"终端"中做所有这些.

要使用G ++编译器,您需要执行以下操作:

  1. 导航到存储*.cpp文件的目录.

    cd ~/programs/myprograms/
    (〜是您家的快捷方式,即/ Users/Ryan/programs/myprograms /,替换为您实际使用的位置.)

  2. 编译它

    g++ input.cpp -o output.bin (output.bin可以是任何具有任何扩展名的东西,真的.bin在unix上很常见.)

    如果成功,应该返回NOTHING,这没关系.通常你会得到失败的回报.

    但是,如果键入ls,您将在同一目录中看到文件列表.例如,您将看到其他文件夹,input.cpp和output.bin

  3. 从目录内部,现在执行它 ./outbut.bin


P-A*_*P-A 8

假设当前目录不在路径中,则语法为./[name of the program].

例如 ./a.out

  • 对你有益!点和斜线是因为在许多系统上,当前目录(Unix术语中的".")不是shell搜索的路径的一部分.因此,添加它可以明确您要运行的程序. (2认同)

Naz*_*gob 7

添加以下内容以获得最佳警告,您不会后悔.如果可以的话,编译WISE(警告是错误的)

- Wall -pedantic -Weffc++ -Werror
Run Code Online (Sandbox Code Playgroud)


mar*_*mas 7

这样做的紧凑方式可能是:

make foo && ./$_
Run Code Online (Sandbox Code Playgroud)

很高兴有一个单行,所以你可以轻松地重新运行你的可执行文件.


小智 5

要编译C或C ++程序,有一个通用命令:

  1. make filename

  2. ./filename

make会将您的源文件构建为具有相同名称的可执行文件。但是,如果您要使用标准方式,则可以使用gcc编译器来构建C程序和g ++ for c ++

对于C:

gcc filename.c

./a.out
Run Code Online (Sandbox Code Playgroud)

对于C ++:

g++ filename.cpp

./a.out
Run Code Online (Sandbox Code Playgroud)


小智 5

第 1 步 - 使用命令创建 cpp 文件

touch test.cpp
Run Code Online (Sandbox Code Playgroud)

第 2 步 - 运行此命令

g++ test.cpp
Run Code Online (Sandbox Code Playgroud)

第 3 步 - 运行您的 cpp 文件

./a.out
Run Code Online (Sandbox Code Playgroud)