2016-02-08 18 views
6

Mam konfigurację projektu z kilkoma aplikacjami z biblioteką współdzieloną, wszystko to jest ładnie zbudowane przy użyciu projektu SUBDIRS, w którym aplikacje zależą od biblioteki współdzielonej.Ustawienie zmiennej PATH/LD_LIBRARY_PATH dla "make check" z QMake

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

Każda aplikacja zawiera również szereg testów, z CONFIG += testcase zestawie.

Spowoduje to utworzenie docelowego obiektu check, dzięki czemu możemy przeprowadzić wszystkie testy jednostkowe z poziomu najwyższego poziomu .pro przy użyciu make check.

Problem polega na tym, że niektóre testy aplikacji wymagają obecności kodu w sharedLib, dlatego musi być wykrywalny zgodnie z regułami wyszukiwania każdej biblioteki platform.

W systemie Windows jedną z opcji jest lokalizacja sharedLib na PATH, w systemie Linux możemy dodać lokalizację sharedLib do LD_LIBRARY_PATH, na komputerze Mac DYLD_LIBRARY_PATH.

Jednym z rozwiązań jest po prostu ustawić lokalizację wbudowanej współdzielonej lib przed uruchomieniem make check:

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

i to działa, ale wydaje się nieco zbędny, ponieważ jest to same skrypty kompilacji, które budują wspólne biblioteka, żeby wiedzieć, ścieżkę do sharedLib binarnym lokalizacji, które można odwoływać się od wewnątrz .pro/plików pri adresem:

$$TOP_BUILDDIR/sharedLib/release 

tak, to tam i tak ustawić PATH/LD_LIBRARY_PATH/DYLD_LIBRARY_PATH od wewnątrz plików projektu w celu s polecenia make check?

Odpowiedz

0

Jeśli używasz gcc, możesz użyć parametru rpath gcc.

-rpath = reż
            dodać katalog do wykonawczego biblioteki wyszukiwania ścieżki. Jest używane:
            podczas łączenia pliku wykonywalnego ELF z obiektami współużytkowanymi. Wszystko -rpath
            argumenty są łączone i przesyłane do Runtime łącznika, który
            wykorzystuje je do zlokalizowania obiektów udostępnionych w wykonywania.

QMAKE_CXXFLAGS + = -rpath =/the/absolutna/path

Jeśli używasz tej techniki, to nie będzie konieczne, aby edytować LD_LIBRARY_PATH

0

W Qt 5.5 dodaje się QMake wypowiedź poprzedza ścieżkę $$TOP_BUILDDIR/sharedLib/release do LD_LIBRARY_PATH za cel check:

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

I czerpał inspirację do tego rozwiązania z plików testcast.prf i qt_functions.prf (zwłaszcza funkcje qtAddTargetEnv() i qtAddToolEnv()), zarówno w mieście $$[QT_INSTALL_PREFIX]/mkspecs/features.

Powiązane problemy