Управление зависимостями 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).).