1

我正在尝试构建一个 Swift 包管理器系统包(一个 module.modulemap),使两个系统 C 库可用,其中一个包含另一个。

也就是说,一个(比如 libcurl)是一个基本模块,另一个 C 库包含它(就像这样:)#include "libcurl.h"。在常规的 C 端,这是可行的,因为 makefile 传递了正确的-I标志并且一切都很好(我大概可以在 SPM 中做同样的事情,但我想避免给 SPM 额外的标志)。

所以我想出的是这个模块图:

module CBase [system] {
  header "/usr/include/curl.h"
  link "curl"
  export *
}

module CMyLib [system] {
  use CBase
  header "/usr/include/mylib.h"
  link "mylib"
  export *
}

CBase在一个运行良好的 Swift 包中导入。但是当我尝试 importCMyLib时,编译器会抱怨:

error: 'curl.h' file not found

这是可以理解的,因为编译器不知道在哪里看(尽管我认为这use CBase会有所帮助)。

有没有办法让它工作而不必-Xcc -I在构建过程中添加标志?

更新 1:在某种程度上,这在 Swift SR-145SE-0063: SwiftPM System Module Search Paths中有所涉及。建议使用 Package.swiftpkgConfig设置。这似乎适用于我的特定设置。但是,如果没有.pc文件,那就是鸡和蛋。我尝试在包中嵌入一个自己的.pc文件,但系统包目录未添加到PKG_CONFIG_PATH(因此在编译依赖模块期间不会考虑)。所以问题是:如何在安装了库但没有 oa.pc文件(只有头文件和库)的环境中实现这一点。

4

0 回答 0