@JWWalker 解释了如何通过更改代码以应对 macOS GUI 环境来解决您的问题。这是一种不同的方法,可以避免弄乱你的 C++。选择最适合您需要的那一款。
如果您的跨平台应用程序设计为在 shell 提示符下运行,您可能希望在 macOS Terminal 应用程序中运行它。您可以使用一个小型 AppleScript 应用程序来执行此操作,该应用程序接受 Finder 传递的文件路径并调用终端应用程序来运行您的 C++ 代码。
为此打开Script Editor,您会在Applications 中的Utilities 中找到它。输入以下内容:
on open passedItems
set convertedPaths to ""
# convert passed macOS paths to posix paths
repeat with nextItem in passedItems
set posixPath to the POSIX path of nextItem # convert macOS alias to posix path
set convertedPaths to convertedPaths & " '" & posixPath & "'" # place in quotes to protect any spaces
end repeat
tell application "Terminal" # open (if required) and activate Terminal
activate
do script "echo " & convertedPaths # just run echo - use the path to your C++ binary instead
end tell
end open
如果你会用 C++ 编程,你可能会明白这一点,如果不搜索 AppleScript,一切都会变得清晰。
现在将其保存为应用程序,在此演示中,它以“Bridge.app”的形式保存在 /tmp/bridge(macOS 上为 /private/tmp/bridge)中。
现在创建一些具有合适扩展名的测试文件,例如:
$ cd /tmp/bridge
$ touch a.bridgeDemo 'b c.bridgeDemo'
您可以在终端中使用以下方法在 Finder 窗口中打开 /tmp/bridge:
$ open /tmp/bridge
在 Finder 中选择您的任何测试文件,执行 Get Info 并将文件设置为使用 Bridge 打开,然后点击 Change All...
现在试一试:在 Finder 中选择测试文件并打开它们。您应该会看到终端打开/激活并显示如下内容:
$ echo '/private/tmp/bridge/a.bridgeDemo' '/private/tmp/bridge/b c.bridgeDemo'
/private/tmp/bridge/a.bridgeDemo /private/tmp/bridge/b c.bridgeDemo
$
现在编辑 AppleScript 以运行您编译的 C++ 而不是 echo 并将其保存在合适的位置。高温