Управление зависимостями C с помощью DUB

Я тестировал DUB и хотел установить derelcitsdl2 с

"dependencies": {
   "derelict-sdl2": ">=1.2.10"
}

Но он сразу выдает ошибку времени выполнения, когда я его запускаю. Он говорит мне, что не может найти файлы *.so.

Когда я создаю кроссплатформенный проект, я не хочу зависеть от таких глобальных системных пакетов, и это, скорее всего, будет проблемой для Windows.

Можно ли запустить buildscripts с DUB?

Что-то, что может выглядеть так

"dependencies": {
   "derelict-sdl2": ">=1.2.10"
}
"c-dependency-sdl":{
   git clone sdllink && cd sdl && cmake . && make && make install clib
 }

Я не нашел информации на веб-сайте DUB, которая говорит мне, что это, скорее всего, невозможно.

Как вы строите свои проекты для разных платформ?

Нужно ли для этого писать сценарии.sh / .bat? Как бы я указать локальный путь поиска?

2 ответа

Решение

Насколько я знаю, даб не справляется с установкой не-даб зависимостей. Вы можете описать требования к системной библиотеке с помощью systemDependencies запись, которая будет "видна в реестре и будет отображаться в случае ошибок компоновщика", но они не будут установлены автоматически.

Вы могли бы использовать preGenerateCommands или же preBuildCommands выполнять команды оболочки, как вы описали выше. Я бы поместил сценарии установки в сценарии.sh/.bat, как вы описали выше (чтобы они могли использоваться пользователями, не являющимися дубликатами), а затем поместил что-то подобное в dub.json:

"preGenerateCommands-posix":   [ "./setup.sh"  ],
"preGenerateCommands-windows": [ "./setup.bat" ]

На Linux я бы обычно предполагал, что .so файлы доступны по стандартному пути поиска (или доступны для установки через менеджер пакетов), особенно для чего-то общего, такого как sdl.

Что касается указания пути поиска, я просто использую lflags:

"lflags": [ "-L./ext/sdl/lib" ] (or wherever the local libs are)

Источники: формат пакета DUB

Полное раскрытие: я на самом деле не пытался использовать preGenerateCommands, но это звучит как то, что вам нужно.

Что бы это ни стоило, я перевернул эту проблему и использую make/gmake для управления сборкой верхнего уровня. Это обрабатывает зависимости C/C++ (которые в моем случае устанавливаются в / usr / local / lib и /usr/local/include) и использует Dub для сборки частей языка D (ссылаясь на путь зависимости как lflags в dub.json).).

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