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

Posted

技术标签:

【中文标题】如何在 Unix 控制台/Mac 终端中编译和运行 C/C++?【英文标题】:How can I compile and run C/C++ code in a Unix console or Mac terminal? 【发布时间】:2010-09-18 06:47:31 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

例如./a.out

【讨论】:

对你有好处!点和斜杠之所以存在,是因为在许多系统上,当前目录(Unix 术语中的“.”)不是 shell 搜索的路径的一部分。因此,添加它可以明确您要运行哪个程序。【参考方案2】:
gcc main.cpp -o main.out  
./main.out

【讨论】:

作为一个菜鸟,我为在执行时不包括“./”而感到非常悲痛 我使用了“gcc main.cpp -o main.out”,得到了这个错误,Undefined symbols for architecture x86_64: "std::__1::locale::use_facet(std::__1: :locale::id&) const", ... 原来原因是,gcc default-links 是 libc。而使用 g++ 将与 libstdc++ 链接。所以使用“g++ main.cpp -o main.out”可能会更好。 关于Undefined symbols for architecture x86_64 问题,我将命令修改如下:gcc -lstdc++ main.cpp -o main.out,在我的Mac上运行。通过链接:***.com/questions/11852568/…【参考方案3】:

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

- Wall -pedantic -Weffc++ -Werror

【讨论】:

【参考方案4】:

使用makefile。即使对于非常小的(= 一个文件)项目,付出努力可能也是值得的,因为您可以有几组编译器设置来测试事物。通过这种方式,调试和部署工作变得更加容易。

阅读make manual,乍一看似乎很长,但大多数部分您可以略读。总而言之,这花了我几个小时,让我的工作效率大大提高。

【讨论】:

【参考方案5】:

如果是简单的单源程序:

make foo

其中源文件为 foo.c 或 foo.cpp 等。

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

运行刚刚构建的可执行文件与运行任何程序相同 - 但您通常需要指定可执行文件的路径,因为 shell 只会搜索 $PATH 中的内容以查找可执行文件,而且大多数情况下确实如此不包括当前目录 (.)。

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

./foo

【讨论】:

我没有意识到内置规则传播到调用 make 时指定的目标。今天学到了新东西 =) "-bash: make: command not found" 不是make main.cpp,而是make main ./ 在 ./foo 中做了什么? @F***Amran 指的是当前目录。 shell 将仅在$PATH 环境变量中列出的目录中查找要执行的程序,除非在运行程序时指定了路径。出于安全原因,.(当前目录)通常不在$PATH 中。【参考方案6】:

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

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

回显 $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 X 的主目录中有一个名为 MyProgram 的可执行文件,我可以完全限定它:

/Users/oliver/MyProgram

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

我的项目/我的程序

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

../MyProject/MyProgram

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

./我的程序

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

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

这可以通过在您的主目录中创建或编辑现有的.bash_profile 文件并添加以下行来轻松完成:

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

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

export PATH=~/bin:$PATH

【讨论】:

看起来是个好主意 编辑:nvm 我很讽刺。只是所有 $PATH 的东西都让我想起了 Windows“环境变量”,你不应该把它们弄得太多【参考方案7】:

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

$ g++ -o lab21 iterative.cpp

-o 是字母 O 不是零

lab21 将是您的可执行文件

iterative.cpp 是你的 c++ 文件

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

$ ./lab21

【讨论】:

【参考方案8】:

我找到了这个带有方向的链接:

http://www.wesg.ca/2007/11/how-to-write-and-compile-c-programs-on-mac-os-x/

基本上你会这样做:

gcc hello.c
./a.out (or with the output file of the first command)

【讨论】:

你的意思是gcc hello.c -o a.out吗?与gcc hello.c 相同。【参考方案9】:

Ryan,我将其更改为答案而不是评论,因为看起来我太简短了。在“终端”中执行所有这些操作。

要使用 G++ 编译器,您需要这样做:

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

    cd ~/programs/myprograms/ (~是你家的快捷方式,即/Users/Ryan/programs/myprograms/,替换成你实际使用的位置。)

    编译

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

    如果成功,应该不会返回任何内容,这是好的。通常,您会因失败而获得回报。

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

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

【讨论】:

感谢这工作。你会碰巧知道任何可以解释这些事情的教程吗?就像 G++ 的确切含义,'o' 开关是什么以及可能出现的其他任何东西? 添加关于make 的评论将无法工作,因为没有生成文件。 Ryan,您可以在终端中键入“man g++”以获取“手册页”(即手册,我猜 Apple 已嵌入)。不过,我还没有看到任何很棒的教程。虽然,g++ 的手册页可能会非常深入地介绍 CFLAGS 和各种高级编译选项。 Nitpick:“如果成功,应该没有 [打印],这没关系。通常你会在失败时得到 [输出]。”总会有一个返回值,0代表成功,非0代表失败。 从***.com/questions/13714436/…合并(试图整合一些基本说明)【参考方案10】:

对我来说两个步骤:

第一:

make foo

然后:

./foo

【讨论】:

对不起,我绝对是个菜鸟。这里的 foo 是什么?【参考方案11】:

执行此操作的紧凑方法可能是:

make foo && ./$_

很高兴有一个单行,这样您就可以轻松地再次运行您的可执行文件。

【讨论】:

【参考方案12】:

使用终端运行 .C 文件是一个两步过程。 第一步是在终端输入gcc并将.C文件拖放到终端,然后按Enter

username$ gcc /Desktop/test.c 

第二步,运行如下命令:

username$ ~/a.out

【讨论】:

【参考方案13】:

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

    make filename

    ./filename

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

对于 C:

gcc filename.c

./a.out

对于 C++:

g++ filename.cpp

./a.out

【讨论】:

【参考方案14】:

只要输入你的 c/cpp 文件所在的目录即可。

用于编译和运行 c 代码。

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

用于编译和运行 c++ 代码。

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

“$”是默认的mac终端符号

【讨论】:

【参考方案15】:

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

    如果cpp文件的路径是somePath/fileName.cpp,先进入路径为somePath的目录 要编译 fileName.cpp,请键入 c++ fileName.cpp -o fileName 要运行程序,请输入 ./fileName

【讨论】:

【参考方案16】:

对于运行 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

【讨论】:

【参考方案17】:

您需要进入保存文件的文件夹。 编译代码:gcc fileName 您也可以使用g++ fileName 这将编译您的代码并创建一个二进制文件。 现在在同一文件夹中查找二进制文件并运行它。

【讨论】:

【参考方案18】:

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

触摸测试.cpp

第 2 步 - 运行此命令

g++ test.cpp

第 3 步 - 运行您的 cpp 文件

./a.out

【讨论】:

以上是关于如何在 Unix 控制台/Mac 终端中编译和运行 C/C++?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Unix控制台或Mac终端上运行shell脚本?

如何在mac终端中运行c++程序

如何删除某个目录(在 Mac 终端中)-unix 中文件名的最后 n 个字符?

如何在 Mac 终端中从 Visual Studio 运行应用程序

常见的UNIX命令

常见的UNIX命令