我有一个静态库,在OS X和Windows版本之间共享很多源代码。两个版本都使用CMAKE。由于最近的请求,我考虑过linux版本。
OS X并使用Carbon。
Windows使用straign win32 API,没有MFC
在C ++(。cpp)
我的问题是:
对于OS X版本,Apple正在丢弃64位Carbon,那么我可以在这个库中混合使用Carbon和Cocoa类吗?我只是将所有文件更改为.mm(对于Cocoa我需要的Objective-C)
如果我更改为.mm,这会对Windows编辑产生什么影响?
如果我改为.mm,它对Linux会有什么影响?
任何人都可以提供一些有关如何完成此任务的见解吗?
答案 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)
无论如何,我认为将.cpp改为.mm根本不是一个好主意,也不会混合使用C ++和Objective-C。只需在单独的.m文件中开始迁移到Cocoa。
编辑:如果将.cpp更改为.mm,则不再编译其他平台上的文件。所以我的建议是创建新的Cocoa类。其中一些当然会引用一些c ++代码,包括c ++头文件。那些将具有.mm扩展名。