我的module.modulemap
文件如下所示:
module CompanyInternalSDK {
header "~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
export *
}
然而,我收到此错误:
/Users/username/Path/To/Project/CompanyInternalSDK/module.modulemap:2:12: error: header '~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h' not found
header "~/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
^
当我使用没有波浪号的绝对路径时,它编译得很好,但由于这将像这样分发给所有开发人员,我想使用波浪号。 有没有办法让这项工作正常?
我还尝试在header
字符串中使用环境变量,但这也不起作用:
module CompanyInternalSDK {
header "${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
export *
}
/Users/username/Path/To/Project/CompanyInternalSDK/module.modulemap:2:12: error: header '${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h' not found
header "${HOME}/Company/CompanyInternalSDK.framework/Headers/CompanyInternalSDK.h"
^
答案 0 :(得分:3)
不,模块映射语法不会扩展波形符或环境变量。它最终只是期望stat
你给它的路径,如果那里没有文件,它就会抱怨。
File
对象,作为here,用于框架的Headers/
公共头文件夹中的标头。getFile
最终会调用getStatValue
来执行缓存查找。FileSystemStatCache::get
最终会在LLVM的文件系统抽象中出现问题,它调用sys::fs::status
,其记录为POSIX stat
。stat
按原样使用路径,没有波形变量或环境变量扩展 - 这些的常见可用性是由于shell帮助你,而不是在系统级别大部分时间自动发生的事情但是,在模块映射中使用相对路径是标准的。词法分析器尊重这一点,所有模块地图文档都证明了这一点。在您的模块映射文件与库共存并与其一起安装的常见情况下,这应该足以正确解析路径。