ModuleMap:如何为伞 header 设置相对路径?

ModuleMap: How can I set a relative path for the umbrella header?

我正在使用 Swift 包管理器。我有一个可以通过 "swift build" 成功构建的项目。我通过 "swift package generate-xcodeproj" 创建了一个 Xcode 项目。当我在 Xcode 中打开项目时,它构建成功。

Xcode项目包括两个模块A和B。

模块 A 具有以下地图:

module ModuleA {
    umbrella header "/Users/Robert/Temp/MyProject/Sources/ModuleA/include/ModuleA.h"
    link "ModuleA"
    export *
}

模块 B 依赖于 A 并具有以下导入:

import ModuleA

到目前为止一切顺利;一切构建成功。现在我想更改模块映射,使其使用相对路径,例如:

module ModuleA {
    umbrella header "ModuleA.h"
    link "ModuleA"
    export *
}

但是,当我这样做时,我无法构建模块 B:错误 - 未找到 Umbrella header 'ModuleA.h'。我已经在构建设置 -> 搜索路径 -> Header 搜索路径和用户 Header 搜索路径中尝试了我能想到的一切。我在网上、这里和其他地方发现了类似的问题,并尝试了我阅读的内容,但到目前为止还没有成功。

这已经到了拔毛的阶段了。任何建议将不胜感激!

我猜你正在修改生成的模块映射。在 /Users/Robert/Temp/MyProject/Sources/ModuleA/include/module.modulemap 创建模块映射文件,其中包含:

module ModuleA {
    umbrella header "ModuleA.h"
    link "ModuleA"
    export *
}

运行 $ swift package clean 删除 .build 目录中旧生成的模块映射,$ swift build 确认自定义模块映射有效。 然后删除生成的Xcode项目和re-generate它。