SwiftPM: Как настроить Swift module.map со ссылкой на две подключенные библиотеки C

Я пытаюсь создать системный пакет Swift Package Manager (module.modulemap), делающий доступными две системные библиотеки C, одна из которых включает в себя другую.

То есть один (скажем, libcurl) является базовым модулем, а другая библиотека C включает это (например, так: #include "libcurl.h"). На обычной стороне C это работает, потому что make-файлы проходят правильно -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 работает нормально. Но когда я пытаюсь импортировать CMyLib Компилятор жалуется:

error: 'curl.h' file not found

Что довольно понятно, потому что компилятор не знает, где искать (хотя я предполагал, что use CBase помог бы).

Есть ли способ заставить это работать без добавления -Xcc -I флаги к процессу сборки?

Обновление 1: В определенной степени это описано в Swift SR-145 и SE-0063: Пути поиска системного модуля SwiftPM. Рекомендуется использовать Package.swift pkgConfig установка. Кажется, это работает нормально для моей конкретной установки. Тем не менее, это курица и яйцо, если нет .pc файл. Я пытался встраивать свой собственный .pc файл в пакете, но каталог системного пакета не добавляется в PKG_CONFIG_PATH (и, следовательно, не будет учитываться при компиляции зависимого модуля). Таким образом, возникает вопрос: как сделать это в среде, где установлены библиотеки, но без .pc файл (только заголовок и lib).

0 ответов

Другие вопросы по тегам