2015-04-08 2 views
13

मैं Qmake और QtCreator का उपयोग कर संकलन पार कर रहा हूँ। किट्स (टूलचेन और क्यूमेक विवरण वहां सेट किए गए हैं) में सेटिंग्स में Sysroot: नामक एक फ़ील्ड है। (Example here)मेकफ़ाइल में कौन सा आदेश QtCreator स्थानांतरण से "Sysroot" करता है?

के बाद से QtCreator और qmake अंत में, कर रहे हैं, एक Makefile पैदा करने के लिए जिम्मेदार है, मेरे सवाल है, क्या करना है कि विकल्प के लिए Makefile में अनुवाद करता है और यह कैसे toolchain के लिए पारित किया जाता है? सवाल

के लिए


प्रेरणा मैं ~/path-to-sysroot को Sysroot: की ओर इशारा करते है। ~/path-to-sysroot में एक एम्बेडेड लक्ष्य के लिए संकलित नियमित सिसरूट संरचना क्रॉस शामिल है।

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

जब मैं कुछ कोड है जो ~/path-to-sysroot/usr/lib में लाइब्रेरी पर निर्भर करती संकलन को पार करने का प्रयास करें, यह संदेश है कि libs याद कर रहे हैं, लेकिन वहाँ अस्तित्व के साथ विफल रहता है। मैंने जेनरेट किए गए मेकफ़ाइल को पार्स किया है और ~/path-to-sysroot/usr/lib का कोई निशान नहीं मिला है।

+0

में कंपाइलर झंडे में मैन्युअल रूप से सिसरूट सेट करना होगा, यह संभवतः या तो जीसीसी को '--इसिसोट' विकल्प के रूप में समाप्त होता है या सीधे टूलचेन में संकलित किया जाता है (ताकि इसे निर्दिष्ट करने की आवश्यकता न हो)। आपको वास्तव में क्या त्रुटि संदेश मिलता है? क्या आपने जनरेट किए गए मेकफ़ाइल में संकलन कमांड का पता लगाने का प्रबंधन किया था, और यदि ऐसा है तो यह क्या कहता है? (डीबग करने का एक आसान तरीका शैल से निर्माण के दौरान Ctrl-C दबाएं और देखें कि आपको त्रुटि कहाँ मिलती है, अगर आप * nix पर हैं।) – Ulfalizer

+0

क्या आपने स्वयं Qt बनाया था? क्यूटी को सही तरीके से बनाने के लिए मुझे बहुत सी सिरदर्द हो रही थी ताकि हम एआरएम के लिए क्रॉस-संकलन कर सकें। 'Qmake --query' चलाएं और देखें कि उस कमांड के आउटपुट में sysroot सही है या नहीं। कुछ पथ स्वचालित रूप से qmake के लिए कॉन्फ़िगर किए जाते हैं - मुझे संदेह है कि वे qmake में डिफ़ॉल्ट के रूप में हार्डकोड किए गए हैं, लेकिन उन्हें ओवरराइड किया जा सकता है ('qmake' कमांड के किसी अन्य रूप का उपयोग करके)। – Steve

+0

@Ulfalizer यह कहता है कि लाइब्रेरी की हेडर फ़ाइल गुम है। '-सिसरूट' के रूप में समाप्त होने वाला कुछ ऐसा था जो मेकफ़ाइल में ढूंढने की उम्मीद कर रहा था। देखें कि QtCreator में निर्दिष्ट सेटिंग टूलचेन में कैसे संकलित की जा सकती है। – TheMeaningfulEngineer

उत्तर

1

से: http://doc.qt.io/qt-5/qt-conf.html

qt.conf फ़ाइल हार्ड-कोडेड पथ कि क्यूटी पुस्तकालय में संकलित कर रहे हैं ओवरराइड करने के लिए इस्तेमाल किया जा सकता। ये पथ QLibraryInfo कक्षा का उपयोग कर सुलभ हैं। Qt.conf के बिना, QLibraryInfo में फ़ंक्शन इन हार्ड-कोड किए गए पथ लौटाते हैं; अन्यथा वे qt.conf में निर्दिष्ट पथ वापस करते हैं।

qt.conf के बिना, क्यूटी पुस्तकालय प्लगइन, अनुवाद आदि के लिए हार्ड-कोड किए गए पथ का उपयोग करेंगे। ये पथ लक्ष्य प्रणाली पर मौजूद नहीं हो सकते हैं, या वे पहुंच योग्य नहीं हो सकते हैं। इस वजह से, क्यूटी पुस्तकालयों को कहीं और देखने के लिए आपको qt.conf की आवश्यकता हो सकती है।

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 एक sysroot तर्क का उपयोग नहीं करता है जिसमें इसके सभी पथ हैं। आप qt.conf में उन पथों को ओवरराइड करके qmake को कस्टमाइज़ कर सकते हैं लेकिन फिर भी इसमें कोई रास्ता नहीं है जो sysroot दिखाता है। और मुझे नहीं लगता कि इसमें सिसरूट निर्दिष्ट करने का कोई विकल्प है। आपको qtcreator

+0

अंत में, 'qmake' मेकफ़ाइल उत्पन्न करने के लिए केवल एक उपकरण है और एक बार ऐसा करने के बाद, सही निर्देशिका में जाना संभव है और बस' रन ' 'मतलब यह है कि sysroot पथ (विशेषता नाम के बावजूद) किसी भी तरह मेकफ़ाइल और अंत में कंपाइलर को पास किया जाता है। यही वह जवाब है जिसे मैं ढूंढ रहा हूं। – TheMeaningfulEngineer

संबंधित मुद्दे