0

我正在从纯 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文件中包装数百行定义之外,是否有更好的方法可以传递符号,而不需要单独导入它们?也就是说,仅通过导入框架?

谢谢。

4

0 回答 0