我正在从纯 C 源代码在 Xcode 中构建一个静态库。Viamodule.modulemap
是一个我可以在 Swift 和 Objective-C 中使用的模块,包括一个关键的头文件enum.h
。它看起来像这样:
module CLibMyLibrary {
header "CLibMyLibraryModule.h" # <- has all of my C lib's public headers in it.
export *
}
我有一个用 Swift 编写的框架,它包装了 C 库。在框架内,我可以enum.h
很好地使用符号。但是,我希望我的框架的用户也可以在 Swift 中访问来自enum.h
.
如何在框架内处理,让框架用户不必enum.h
单独导入文件?也就是说,完成后import MyFramework
,我该如何enum.h
以“正确”的方式公开?
现在我有这个复杂的过程。在我的框架中,我添加了一个如下所示的框架标头:
#import <CLibMyLibrary/enum.h>
此时,它会导致有关导入非模块化标头的错误(即使此文件是 CLibMyLibrary 模块的一部分,如上所述)。所以我添加了一个额外的“假”模块,它只模块化这个文件,就像这样:
module CLibMyLibraryEnum {
header "enum.h"
export *
}
现在在一个应用程序中,我可以简单地Swift 识别import MyFramework
所有enum.h
符号。好的。这正是我所期望的。
不过,假模块困扰着我。它可能很脆弱,而且可能不是预期的使用方式。
除了在enum.h
文件中包装数百行定义之外,是否有更好的方法可以传递符号,而不需要单独导入它们?也就是说,仅通过导入框架?
谢谢。