2014-12-27 17 views
5

stavo testando DUB e volevo installare derelcitsdl2 conGestione delle dipendenze C con DUB

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

Ma genera immediatamente un errore di runtime quando l'eseguo. Mi dice che non riesce a trovare i file * .so.

Quando creo un progetto multipiattaforma, non voglio dipendere da pacchetti di sistema globali come quello e molto probabilmente sarà un problema su Windows.

È possibile eseguire buildscripts con DUB?

Qualcosa che potrebbe assomigliare a questo

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

non ho trovato un informazioni sul sito web DUB, che mi dice che è la maggior parte non è probabile possibile.

Come si costruiscono i progetti per diverse piattaforme?

Devo scrivere script .sh/.bat per questo? Come dovrei specificare il percorso di ricerca locale?

risposta

5

Per quanto ne so, dub non gestisce l'installazione di dipendenze non dub. È possibile descrivere i requisiti della libreria di sistema con la voce systemDependencies, che sarà "visibile sul registro e verrà visualizzata in caso di errori del linker", ma non verranno installati automaticamente.

È possibile utilizzare preGenerateCommands o preBuildCommands per eseguire comandi di shell come descritto sopra. Avrei messo lo script di installazione in .sh/.bat script come hai descritto sopra (in modo che siano utilizzabili per gli utenti non-dub), e quindi inserire qualcosa di simile in dub.json:

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

su Linux, lo farei in genere si presuppone che i necessari file .so siano disponibili sul percorso di ricerca standard (o disponibili per l'installazione tramite un gestore di pacchetti), specialmente per qualcosa di comune come sdl.

Per quanto riguarda la specifica percorso di ricerca, mi basta usare lflags:

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

Fonti: DUB Package Format

completa divulgazione: Non ho effettivamente provato ad utilizzare preGenerateCommands, ma suona come quello che vi serve.

1

Per quello che vale, accendo questo problema e utilizzo make/gmake per guidare la build di primo livello. Gestisce le dipendenze C/C++ (che nel mio caso vengono installate in/usr/local/lib e/usr/local/include) e utilizza Dub per creare le parti in linguaggio D (facendo riferimento al percorso delle dipendenze come lflags in dub.json).

Problemi correlati