混合碳和可可,然后其他平台呢?

时间:2009-07-16 15:33:10

标签: cocoa winapi cross-platform

我有一个静态库,在OS X和Windows版本之间共享很多源代码。两个版本都使用CMAKE。由于最近的请求,我考虑过linux版本。

  1. OS X并使用Carbon。

  2. Windows使用straign win32 API,没有MFC

  3. 在C ++(。cpp)

  4. 我的问题是:

    1. 对于OS X版本,Apple正在丢弃64位Carbon,那么我可以在这个库中混合使用Carbon和Cocoa类吗?我只是将所有文件更改为.mm(对于Cocoa我需要的Objective-C)

    2. 如果我更改为.mm,这会对Windows编辑产生什么影响?

    3. 如果我改为.mm,它对Linux会有什么影响?

    4. 任何人都可以提供一些有关如何完成此任务的见解吗?

2 个答案:

答案 0 :(得分:1)

真的建议不要混用Objective-C和C ++。虽然在OS X上它们都是由GCC编译的,因此它可能可能,但Carbon和Cocoa库实际上并不是混合的。 Carbon和Cocoa都是完整且独立的窗口库。但是,在OS X 10.2中,可以在Window级别混合它们(Carbon应用程序可以托管Cocoa窗口),而10.2之后的任何内容都应该能够将库混合到小部件级别。因此,如果您的库的所有用户都使用OS X的更新版本,则可能......我仍然不推荐它。另外,你必须链接所有额外的代码。

更改为.mm的效果实际上取决于您的编译器。我猜你使用gcc,因为你的库将适用于所有三个平台,所以在gcc上,.mm代码可以编译为C ++,如下所示。

gcc -x c++ [sourcefile]

答案 1 :(得分:1)

Apple发表了一篇好文章guide about mixing Carbon and Cocoa。基本上两者是正交的,所以你可以混合它们。

无论如何,我认为将.cpp改为.mm根本不是一个好主意,也不会混合使用C ++和Objective-C。只需在单独的.m文件中开始迁移到Cocoa。

编辑:如果将.cpp更改为.mm,则不再编译其他平台上的文件。所以我的建议是创建新的Cocoa类。其中一些当然会引用一些c ++代码,包括c ++头文件。那些将具有.mm扩展名。