如何在 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++?的主要内容,如果未能解决你的问题,请参考以下文章
如何删除某个目录(在 Mac 终端中)-unix 中文件名的最后 n 个字符?