是否可以在模块映射中使用系统范围的标头?

Zom*_*agk 6 swift module-map

我想将 OpenSSL 绑定到我的 Swift 客户端代码。我现在使用的是在模块映射中引用的伞头:

module COpenSSL [system] {
  header "copenssl.h"
  export *
}
Run Code Online (Sandbox Code Playgroud)

copenssl.h位于同一个目录中,它只是一系列包含#include <openssl/conf.h>. 有了所有需要的编译器标志,它可以完美地工作:我能够从中导入COpenSSL和使用符号。

但是,我担心代码中的另一个间接级别。我怀疑是否真的有必要。如果我放下伞头,那copenssl.h,然后将包含的内容粘贴到模块映射中,如下所示:

module COpenSSL [system] {
  header "openssl/conf.h"
  /* ...and more */
  export *
}
Run Code Online (Sandbox Code Playgroud)

然后它再也找不到标题,即使所有标志都相同。感觉编译器只搜索模块映射目录,不尊重项目的搜索路径设置。

文件说:

可以通过绝对路径或相对于当前地图文件的路径来引用该文件。

http://clang.llvm.org/docs/Modules.html#module-declaration

但我对硬编码路径犹豫不决,因为它阻碍了跨平台性。

我应该只使用伞头,还是有什么方法可以让编译器查看-I路径?