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).