2015-04-08 20 views
13

Jestem cross kompilacji przy użyciu Qmake i QtCreator. W ustawieniach zestawów (ustawienia toolchain i qmake są tam ustawione) znajduje się pole o nazwie Sysroot:. (Example here)Do jakiego polecenia w Makefile robi się "Sysroot" z transferu QtCreator?

Od Qt Creator i QMake są na końcu, odpowiedzialny za generowanie Makefile, moje pytanie jest, do czego służy ta opcja tłumaczyć w Makefile i jak to przejdzie do toolchain?


Motywacja na pytanie

mam Sysroot: skierowaną ~/path-to-sysroot. ~/path-to-sysroot zawiera zwykłą krzyżową strukturę sysroot skompilowaną dla osadzonego celu.

~/path-to-sysroot 
    ├── bin 
    ├── include 
    ├── lib 
    ├── sbin 
    ├── share 
    └── usr 

Kiedy próbuję przekroczyć skompilować jakiś kod, który zależy od bibliotek w ~/path-to-sysroot/usr/lib, nie jest on z wiadomości, że libs brakuje, ale nie w tytule. Przetworzyłem wygenerowany plik Makefile i nie znaleziono żadnych śladów po ~/path-to-sysroot/usr/lib.

+0

Prawdopodobnie skończy się jako opcja '--sysroot' na GCC lub jest skompilowany bezpośrednio do łańcucha narzędzi (tak, że nie trzeba go określać). Jaki komunikat błędu otrzymujesz dokładnie? Czy udało ci się wyśledzić komendę kompilacji w wygenerowanym pliku makefile i co ona mówi, jeśli tak? (Łatwym sposobem debugowania jest wciśnięcie Ctrl-C podczas kompilacji z powłoki i zobaczenie, gdzie dostaniesz błąd, jeśli jesteś na * nix.) – Ulfalizer

+0

Czy sam zbudowałeś Qt? Miałem wiele bólów głowy, próbując poprawnie zbudować Qt, abyśmy mogli skompilować krzyżowo dla ARM. Uruchom 'qmake --query' i sprawdź, czy sysroot jest poprawny na wyjściu tego polecenia. Niektóre ścieżki są automatycznie konfigurowane dla qmake - podejrzewam, że są one zakodowane na stałe w qmake jako domyślne, ale można je przesłonić (używając innej formy polecenia 'qmake'). – Steve

+0

@Ulfalizer Mówi, że brakuje pliku nagłówkowego biblioteki. Kończenie jako '--sysroot' było czymś, co miałem nadzieję znaleźć w Makefile. Nie widać, w jaki sposób ustawienie określone w QtCreator można skompilować w łańcuchu narzędzi. – TheMeaningfulEngineer

Odpowiedz

1

od: http://doc.qt.io/qt-5/qt-conf.html

plików qt.conf może być używany, aby zastąpić twarde kodowane ścieżki, które są kompilowane do biblioteki Qt. Ścieżki te są dostępne za pomocą klasy QLibraryInfo. Bez qt.conf funkcje w QLibraryInfo zwracają te zakodowane ścieżki; w przeciwnym razie zwracają ścieżki zgodnie z qt.conf.

Bez qt.conf, biblioteki Qt będą używać zakodowanych ścieżek do wyszukiwania wtyczek, tłumaczeń i tak dalej. Ścieżki te mogą nie istnieć w systemie docelowym lub mogą być niedostępne. Z tego powodu możesz potrzebować qt.conf, aby biblioteki Qt wyglądały gdzie indziej.

qmake -query 
QT_SYSROOT:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux 
QT_INSTALL_PREFIX:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr 
QT_INSTALL_PREFIX/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr 
QT_INSTALL_ARCHDATA:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5 
QT_INSTALL_ARCHDATA/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5 
QT_INSTALL_DATA:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5 
QT_INSTALL_DATA/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5 
QT_INSTALL_DOCS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/doc/qt5 
QT_INSTALL_DOCS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/doc/qt5 
QT_INSTALL_HEADERS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/include/qt5 
QT_INSTALL_HEADERS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/include/qt5 
QT_INSTALL_LIBS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib 
QT_INSTALL_LIBS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib 
QT_INSTALL_LIBEXECS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/libexec 
QT_INSTALL_LIBEXECS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/libexec 
QT_INSTALL_BINS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/bin/qt5 
QT_INSTALL_BINS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/bin/qt5 
QT_INSTALL_TESTS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5/tests 
QT_INSTALL_TESTS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5/tests 
QT_INSTALL_PLUGINS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/plugins 
QT_INSTALL_PLUGINS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/plugins 
QT_INSTALL_IMPORTS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/imports 
QT_INSTALL_IMPORTS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/imports 
QT_INSTALL_QML:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/qml 
QT_INSTALL_QML/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5/qml 
QT_INSTALL_TRANSLATIONS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5/translations 
QT_INSTALL_TRANSLATIONS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/share/qt5/translations 
QT_INSTALL_CONFIGURATION:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/etc/qt5 
QT_INSTALL_CONFIGURATION/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/etc/qt5 
QT_INSTALL_EXAMPLES:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/examples 
QT_INSTALL_EXAMPLES/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/examples 
QT_INSTALL_DEMOS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/examples 
QT_INSTALL_DEMOS/raw:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/examples 
QT_HOST_PREFIX:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr 
QT_HOST_DATA:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib/qt5 
QT_HOST_BINS:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/bin/qt5 
QT_HOST_LIBS:/opt/mel/next+snapshot/sysroots/i686-melsdk-linux/usr/lib 
QT_EXTERNAL_HOST_BINS:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/usr/bin/qt5 
QMAKE_SPEC:/home/mentor/work/git/mel_repos/mel_cedar/build/tmp/sysroots/x86_64-linux/usr/lib/qt5/mkspecs/linux-oe-g++ 
QMAKE_XSPEC:linux-oe-g++ 
QMAKE_VERSION:3.0 
QT_VERSION:5.4.1 

qmake doesnot używa argumentu sysroot ma wszystkie ścieżki w nim. Możesz dostosować qmake przez nadpisanie tych ścieżek w qt.conf, ale wciąż nie ma ścieżki, która pokazuje sysroot. I nie sądzę, że ma jakąkolwiek opcję określenia sysroot. Musisz ręcznie ustawić sysroot w znacznikach kompilatora w qtcreator

+0

W końcu 'qmake' jest tylko narzędziem do generowania Makefile i po jego zakończeniu można przejść do właściwego katalogu i po prostu uruchomić' make '. Oznacza to, że ścieżka sysroot (niezależnie od nazwy atrybutu) jest w jakiś sposób przekazywana do pliku makefile i na końcu do kompilatora.To jest odpowiedź, której szukam. – TheMeaningfulEngineer