2014-12-27 14 views
5

ja testował DUB i chciałem zainstalować derelcitsdl2 zZarządzanie zależnościami C o DUB

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

Ale natychmiast zgłasza błąd wykonania podczas uruchamiania go. Mówi mi, że nie może znaleźć plików * .so.

Kiedy buduję projekt między platformami, nie chcę być zależny od globalnych pakietów systemowych, a to najprawdopodobniej będzie problemem w systemie Windows.

Czy można uruchomić buildscripta za pomocą DUB?

Coś, co mogłoby wyglądać tak

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

Nie mogę znaleźć informację na stronie internetowej DUB który mówi mi, że jest to najprawdopodobniej nie możliwe.

Jak budujesz swoje projekty na różne platformy?

Czy muszę pisać w tym celu skrypty .sh/.bat? Jak określić lokalną ścieżkę wyszukiwania?

Odpowiedz

5

Z tego co wiem, dub nie obsługuje instalacji nie-dubowych zależności. Można opisać wymagania bibliotek systemowych wpisami systemDependencies, które będą "widoczne w rejestrze i będą wyświetlane w przypadku błędów łącznika", ale nie zostaną automatycznie zainstalowane.

Można użyć preGenerateCommands lub preBuildCommands, aby wykonać polecenia powłoki, takie jak opisane powyżej. Chciałbym umieścić instalację skryptów .sh/bat skryptów jakbyś opisany powyżej (a więc są użyteczne dla non-dub użytkowników), a następnie umieścić coś takiego w dub.json:

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

na Linuksie, chciałbym zwykle zakłada, że ​​niezbędne pliki .so są dostępne na standardowej ścieżce wyszukiwania (lub dostępne do zainstalowania przez menedżera pakietów), szczególnie w przypadku czegoś popularnego, takiego jak sdl.

Jeśli chodzi o określenie ścieżki wyszukiwania, wystarczy użyć lflags:

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

Źródła: DUB Package Format

Full Disclosure: Nie rzeczywiście spróbował wykorzystać preGenerateCommands, ale wygląda na to, co trzeba.

1

Za to, co jest warte, obracam ten problem i używam make/gmake do sterowania kompilacją najwyższego poziomu. To obsługuje zależności C/C++ (które w moim przypadku są instalowane w/usr/local/lib i/usr/local/include) i używa Dub do budowania części w języku D (odwołanie do ścieżki zależności jako lflags w dub.json).

Powiązane problemy