2016-02-08 21 views
6

Ho un setup di progetto con un paio di app con una libreria condivisa, tutto questo è stato realizzato usando un progetto SUBDIRS, dove le app dipendono dalla libreria condivisa.Impostazione PATH/LD_LIBRARY_PATH per 'make check' con QMake

TEMPLATE = subdirs 
SUBDIRS = app1 app2 sharedLib 
app1.depends = sharedLib 
app2.depends = sharedLib 

Ogni applicazione contiene anche una serie di prove, con CONFIG += testcase set.

Questo crea un target check in modo che possiamo eseguire tutte le unit test dal livello superiore .pro utilizzando make check.

Il problema è che alcuni dei test delle app richiedono la presenza del codice all'interno di sharedLib, pertanto deve essere rilevabile in base alle regole di ricerca di ogni libreria di piattaforme.

un'opzione di Windows On è quello di avere la posizione sharedLib sul PATH, su linux possiamo aggiungere la posizione sharedLib a LD_LIBRARY_PATH, su Mac DYLD_LIBRARY_PATH.

Una soluzione è quella di impostare solo la posizione del lib condivisa costruito prima di eseguire make check:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:build/sharedDll/ 
make check 

e questo funziona, ma sembra un po 'ridondante in quanto è lo script di build stessi che stanno costruendo il condivise biblioteca in modo che sappiano il percorso della posizione binario sharedLib, che può essere richiamato in un file .pro/PRI a:

$$TOP_BUILDDIR/sharedLib/release 

quindi, c'è comunque di impostare il PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH dall'interno delle file di progetto per lo scopo s del comando make check?

risposta

0

Se si utilizza gcc, è possibile utilizzare il parametro rpath di gcc.

-rpath = dir
            Aggiungere una directory al runtime biblioteca percorso di ricerca. Viene utilizzato
            quando si collega un file ELF con oggetti condivisi. Tutti -rpath
            argomenti sono concatenati e passato al runtime linker, che
            utilizza loro di individuare gli oggetti condivisi al runtime.

QMAKE_CXXFLAGS + = -rpath =/la/assoluto/path

Se si utilizza questa tecnica, non sarà necessario modificare LD_LIBRARY_PATH

0

In Qt 5.5, la seguente dichiarazione qmake antepone il percorso $$TOP_BUILDDIR/sharedLib/release per LD_LIBRARY_PATH per il target check:

check.commands = LD_LIBRARY_PATH=$$TOP_BUILDDIR/sharedLib/release:\$$LD_LIBRARY_PATH $$check.commands 

ho tratto ispirazione per questa soluzione dai file testcast.prf e qt_functions.prf (in particolare le funzioni qtAddTargetEnv() e qtAddToolEnv()), entrambi situati in $$[QT_INSTALL_PREFIX]/mkspecs/features.

Problemi correlati