如何在任意目录通过终端输入程序名运行g++编译的C++程序(OSX Sierra)
解决Mac OSX Sierra下任意终端目录运行编译后C++程序的问题
嗨,刚好我之前在Sierra上也折腾过这个需求,先明确说一句:C++本身没法直接实现这个功能——因为终端能直接识别程序名来运行,本质是依赖系统的PATH环境变量(终端会在PATH列出的目录里找匹配的可执行文件),而C++程序本身没有权限修改系统全局的环境配置,所以得靠系统层面的配置来解决,下面给你几个实用的方案:
方案一:把程序放到系统默认的可执行目录
系统默认有几个目录已经在PATH里,比如/usr/local/bin,这是专门给用户放自定义程序的地方,步骤很简单:
- 先编译你的C++程序:
g++ your_program.cpp -o your_program - 把编译好的可执行文件移到
/usr/local/bin(需要管理员权限,输入密码即可):sudo mv your_program /usr/local/bin/ - 搞定!之后不管你在终端的哪个目录,直接输入
your_program就能运行了。
方案二:自定义程序目录并加入PATH
如果不想把程序放到系统目录,也可以自己建一个专属目录,然后把它加到PATH里:
- 在家目录下创建一个存放程序的目录,比如
~/bin:mkdir ~/bin - 修改bash的配置文件(Sierra默认用bash,配置文件是
~/.bash_profile):nano ~/.bash_profile - 在文件末尾添加一行,把你的自定义目录加入
PATH:export PATH="$HOME/bin:$PATH" - 保存并退出nano(按
Ctrl+O,回车确认,再按Ctrl+X),然后让配置立即生效:source ~/.bash_profile - 之后编译程序时,可以直接把输出文件放到这个目录:
或者编译后移过去也行,之后任意终端目录输入程序名就能运行。g++ your_program.cpp -o ~/bin/your_program
方案三:用别名临时/永久映射(不推荐长期用)
如果只是临时想用,或者不想移动文件,可以给程序设一个别名:
- 临时生效:在当前终端输入
alias your_program="/full/path/to/your/compiled/program",之后当前终端就能直接输程序名运行,但关闭终端就失效了。 - 永久生效:把上面的别名命令加到
~/.bash_profile里,和方案二一样,保存后source ~/.bash_profile,之后每次打开终端都能用。不过这个方案的缺点是换一个程序就要加一条别名,不如前两种灵活。
小提醒
- 程序名别和系统已有的命令重名哦(比如别叫
ls、cd),不然会覆盖系统命令导致奇怪的问题。 - 如果修改
PATH后没生效,试试重启终端,或者检查一下配置文件有没有写错。
内容的提问来源于stack exchange,提问作者dvvedz
相关产品推荐
相关产品推荐

