我想将 OpenSSL 绑定到我的 Swift 客户端代码。我现在使用的是模块映射中引用的伞头:
module COpenSSL [system] {
header "copenssl.h"
export *
}
它copenssl.h
位于同一个目录中,它只是一系列包含,例如#include <openssl/conf.h>
. 使用所有需要的编译器标志,它可以完美地工作:我可以从中导入COpenSSL
和使用符号。
但是,我担心我的代码中存在另一个级别的间接性。我怀疑这是否真的有必要。如果我放下伞头,copenssl.h
然后将包含内容粘贴到模块映射中,如下所示:
module COpenSSL [system] {
header "openssl/conf.h"
/* ...and more */
export *
}
然后它不再能找到标题,即使所有的标志都是一样的。感觉编译器只搜索模块映射目录,不尊重项目的搜索路径设置。
文档说:
该文件可以通过绝对路径或相对于当前地图文件的路径来引用。
— http://clang.llvm.org/docs/Modules.html#module-declaration
但我对硬编码路径犹豫不决,因为它阻碍了跨平台性。
我应该只使用伞头,还是有什么方法可以让编译器查看-I
路径?