Это на самом деле очень легко сделать и не имеет ничего общего с SDL или вашей системой сборки.
Сначала отступим
Правильный способ сделать этосоздать "комплект приложений".Существует множество существующих вопросов / документации о том, как их создать.@Mark Setchell описывает один из таких методов в своем ответе.
Если по какой-то причине вы хотите избежать комплектации приложений, прочитайте, как вы можете.
Что на самом деле происходит
Когда вы дважды щелкаете исполняемый файл или приложение, оно на самом деле не выполняется.Что происходит, так это то, что путь передается Launch Services , который затем проверит, является ли что-то «комплектом приложений» или чем-то еще.Если это не комплект приложений, LS проверяет свою базу данных, чтобы увидеть, с каким приложением он должен ее открыть.Вы можете увидеть (используя «Get Info» в Finder) в случае автономного двоичного файла он установлен на «Open with» Terminal.app.По этой причине терминал открывается при двойном щелчке по двоичному файлу.
Как изменить поведение
Вам необходимо убедить Launch Services, что двойной щелчок являетсякомплект приложений.Единственное, что вам нужно сделать, это добавить расширение .app
в ваш бинарный файл.Вот и все.
Я только что проверил это на 10.13, создав новую утилиту командной строки в XCode.Я просто добавил расширение .app
к нему и дважды щелкнул по нему, и он открылся и работал очень хорошо.Я не уверен, что вы можете столкнуться с проблемами (помимо очевидных) с чем-то, что использует stdin
или stdout
(stderr
, кажется, направляется на системную консоль)
Вы можете дажевставьте файл Info.plist
непосредственно в двоичный файл через Xcode (Настройки сборки -> Упаковка -> Создать раздел Info.plist в двоичном файле), если вам нужен один или вы просто хотите, чтобы версия или что-то отображалось в Finder.
Ограничения
Однако есть предостережение: если используется подписание кода, вы не можете просто разобрать существующий комплект приложений, чтобы попробовать его.@rpath
двоичного файла, извлеченного из существующего пакета, связанного с каркасами, необходимо будет изменить.То же самое относится к ресурсам комплекта.
Как уже упоминалось ранее, у вас действительно нет stdin
или stdout
.Приложение SDL, вероятно, не заботится, поскольку оно создаст свой собственный интерфейс;за исключением, возможно, регистрации, которая в любом случае должна быть направлена на консоль.