c++ - 在 Finder 和终端中运行应用程序的 macOS 差异?

标签 c++ macos terminal

我正在使用 Qt Creator 开发 C++ 应用程序。当我查看 Finder 时,我看到以下输出:

    build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug

此文件夹包含目标文件“moc”cpp 文件。在取景器中,我看到了应用程序:

    XMLMPAM.app

虽然我可以从 Finder 启动它,但当我打开终端时,这实际上是一个文件夹。包含文件和子文件夹。

为了从终端启动应用程序,我必须输入:

    ~/build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug/XMLMPAM.app/Contents/MacOS/XMLMPAM

在我报告 CWD 的应用程序中:

从终端或 Qt Creator 调试器启动时:

    CWD:  /Users/Simon/build-XMLMPAM-Desktop_Qt_5_11_2_clang_64bit-Debug/XMLMPAM.app/Contents/MacOS

从 Finder 启动时:

    CWD:  /

我对此感到困惑,这是怎么回事?

最佳答案

XMLMPAM.app 这样的 macOS 应用确实是一个文件夹。在 Apple 术语中,它称为 bundle。它是操作系统和其他实用程序可以识别的具有特定结构的目录。实际的可执行程序文件位于 bundle 的 Contents/MacOS 子文件夹中。这就是 Finder 所在的位置。 Finder 假装它是一个有凝聚力的"file",但您也可以通过右键单击和“显示包内容”进入包内。

如果您想从终端模拟 Finder 行为,请运行 open XMLMPAM.appopen -a XMLMPAM

如果你想获取包的路径,或者其中的任何文件,你可以使用 NSBundle class 的方法.例如:NSBundle.mainBundle.executableURL.path 应该为您提供应用的可执行文件的完整路径。

关于c++ - 在 Finder 和终端中运行应用程序的 macOS 差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55599363/

相关文章:

ruby-on-rails - 安装 pg gem 时出错——extconf.rb 失败

ruby-on-rails - 一键安装 Ruby/Rails/SQLite?

c - 将fork()的子级设置为前台,然后退出父级

ruby - 使 ruby​​ gems 响应终端命令

java - 如何在 Linux 上为 eclipse 产品运行 consoleLog?

C++11 可变大小 POD 结构

c++ - 替换C++字符串中的标点符号

swift - 如何在使用我的 Mac 应用程序的查找器中添加上下文菜单

c++ - 为 OpenGL 的顶点缓冲区对象动态打包数据

c++ - glutBitmapCharacter() 文本没有出现在屏幕上?