如何在Unix控制台或Mac终端中编译/运行C或C++?
(我知道,忘掉它,然后重新学习它.是时候把它写下来了.)
如果它是一个简单的单一源程序:
make foo
源文件是foo.c或foo.cpp等.
你甚至不需要makefile.Make有足够的内置规则将源文件构建为同名的可执行文件,减去扩展名.
运行刚才构建的可执行文件与运行任何程序相同 - 但是您通常需要指定可执行文件的路径,因为shell只搜索$PATH
查找可执行文件的内容,并且通常不包括当前目录(.
).
所以要运行构建的可执行文件foo
:
./foo
gcc main.cpp -o main.out ./main.out
这是适用于所有Unix机器的命令......我在Linux/Ubuntu上使用它,但它也适用于OS X. 在Terminal.app中键入以下命令.
$ g++ -o lab21 iterative.cpp
-o
字母O不是零
lab21
将是你的可执行文件
iterative.cpp
是你的c ++文件
运行该命令后,在终端中键入以下内容以运行程序:
$ ./lab21
对我来说有两个步骤:
第一:
make foo
然后:
./foo
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
这里,波浪号(〜)字符被用作/ Users/oliver的快捷方式.另请注意,hash bang(#!)行需要是文件的第一行(如果它尚不存在).另请注意,此技术要求您的登录shell为bash(Mac OS X和大多数Linux发行版的默认设置).另请注意,如果您希望安装的程序~/bin
优先于系统可执行文件使用,则应按如下方式重新排序export语句:
export PATH=~/bin:$PATH
瑞安,我正在改变这个问题而不是评论,因为看起来我太简短了.在"终端"中做所有这些.
要使用G ++编译器,您需要执行以下操作:
导航到存储*.cpp文件的目录.
cd ~/programs/myprograms/
(〜是您家的快捷方式,即/ Users/Ryan/programs/myprograms /,替换为您实际使用的位置.)
编译它
g++ input.cpp -o output.bin
(output.bin可以是任何具有任何扩展名的东西,真的.bin在unix上很常见.)
如果成功,应该返回NOTHING,这没关系.通常你会得到失败的回报.
但是,如果键入ls
,您将在同一目录中看到文件列表.例如,您将看到其他文件夹,input.cpp和output.bin
从目录内部,现在执行它 ./outbut.bin
假设当前目录不在路径中,则语法为./[name of the program]
.
例如 ./a.out
添加以下内容以获得最佳警告,您不会后悔.如果可以的话,编译WISE(警告是错误的)
- Wall -pedantic -Weffc++ -Werror
这样做的紧凑方式可能是:
make foo && ./$_
很高兴有一个单行,所以你可以轻松地重新运行你的可执行文件.
要编译C或C ++程序,有一个通用命令:
make filename
./filename
make会将您的源文件构建为具有相同名称的可执行文件。但是,如果您要使用标准方式,则可以使用gcc编译器来构建C程序和g ++ for c ++
对于C:
gcc filename.c ./a.out
对于C ++:
g++ filename.cpp ./a.out