我有一个在 Windows、Linux、Android 和 Mac 上运行的多平台应用程序。它在所有平台上使用 g++ 编译。
对于 Windows,我创建了一个安装程序,并通过添加链接器标志摆脱了终端窗口:
-Wl,--subsystem,windows
我正在 Mac 上寻找类似的选项。当我从 GUI 打开可执行文件时,如何摆脱控制台窗口?
这个问题类似于如何在Mac OS(gcc编译器)中隐藏控制台窗口?,除了我的应用程序不是守护进程。
Thanks.
根据您的描述,您正在构建 UNIX 风格的可执行文件。在 OS X 上,它们总是在终端窗口内启动。您在 OS X 上的选择是:
- 作为守护进程运行,如上面链接的帖子中所述
- 在终端中作为 unix 可执行文件运行
- 创建最小的 OS X 应用程序包装器并作为 OS X 应用程序运行
在大多数情况下,您可以通过创建适当的文件来为 unix 风格的可执行文件创建包装器Bundle使用来自的说明Apple 的捆绑包编程指南(跳过 iOS 内容并查看 Mac 捆绑包信息)。
基本目录结构是:
MyApp.app/
Contents/
Info.plist
MacOS/
executable
Resources/
MyApp.icns
您未经修改的可执行文件可以进入MacOS
目录,您需要在以下目录中设置以下键Info.plist
使用 plist 编辑工具或编辑器:
-
CFBundleIdentifier
- 以反向 DNS 表示法表示的应用程序 ID(com.mycompany.myapp
)
-
CFBundleDisplayName
- 您的应用程序的名称,采用人类可读的形式(MyApp
)
-
CFBundleName
- 应用程序的短名称(通常与您的应用程序和可执行文件名称相同)
-
CFBundleVersion
- X.Y[.Z] 形式的版本号
-
CFBundlePackageType
- 封装类型,应该是APPL
对于应用程序
-
CFBundleExecutable
- 您的可执行文件的名称
-
CFBundleSignature
- 老式Apple签名(理论上应该在Apple注册的4个字符代码)
一个最小的 plist 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>MyApp</string>
<key>CFBundleExecutable</key>
<string>a.out</string>
<key>CFBundleIdentifier</key>
<string>com.mycompany.myapp</string>
<key>CFBundleName</key>
<string>MyApp</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>FOOZ</string>
<key>CFBundleVersion</key>
<string>1.0</string>
</dict>
</plist>
(上面的例子使用a.out
作为可执行文件,它将位于MyApp.app/Contents/MacOS/a.out
)
如果你不关心图标,图标资源可以省略,将使用默认的应用程序图标。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)