如何使用clang ++创建捆绑应用程序?

时间:2019-05-07 09:13:27

标签: c++ macos bundle clang++

我正在尝试隔离并重现我在this question中描述的行为。为此,我编写了一些使用Core Graphics Events的代码片段:

#include <iostream>
#include <CoreGraphics/CGEventSource.h>
#include <CoreGraphics/CGEvent.h>

int main()
{
    CGEventSourceRef src = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);

    if(src)
    {
        CGEventRef event = CGEventCreate(src);

        if(event)
        {
            CGPoint pt = CGEventGetLocation(event);
            std::cout << "X = " << pt.x << ", Y = " << pt.y << std::endl;
        }
        else
        {
            std::cout << "Unable to create the event" << std::endl;
        }
    }
    else
    {
        std::cout << "Unable to create the source" << std::endl;
    }

    return 0;
}

我用clang ++编译它:

clang++ -arch i386 -framework CoreGraphics main.cpp -o main

当我运行它时,没有在Mojave上获得例外结果:该应用程序运行没有任何问题,但我除外Mac OS,显示了一个弹出窗口,要求进行一些辅助功能设置。

这就是为什么我有一个假设:二进制文件和捆绑的应用程序之间的行为不同。这是我的问题:如何使用clang编译此代码片段以获取捆绑应用程序?我尝试失败:

clang++ -bundle -arch i386 -framework CoreGraphics main.cpp -o main.app

我应该使用哪个选项?


以下是有关我的系统的一些信息:

$ clang++ --version
Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

我在OS X El Capitan(10.11.6)上进行编译,并在Mojave(10.14.4)上运行我的应用。

0 个答案:

没有答案