2012-05-11 9 views
5
IF(UNIX) 
    # CROSS COMPILATION! ON/OFF 
    #SET(CMAKE_C_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/projects/buildroot/output/host/usr/bin/arm-linux-g++) 
    #SET(CMAKE_C_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-gcc) 
    #SET(CMAKE_CXX_COMPILER /home/username/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-eabi-g++) 
यहाँ

क्या मैं crosscompilation के लिए अब क्या है। मैं इसे एक जैसे कि चलाने का विकल्प जोड़ना चाहते हैं:पास विकल्प crosscompilation को (CROSS_COMPILE)

make CROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

और अगर मैं पथ CROSS_COMPILE बनाने के लिए नहीं है (CMake के लिए नहीं) तो cmake चाहिए पथ makefile के लिए इस विकल्प यह सिस्टम डिफ़ॉल्ट उपयोग करना चाहिए। मैं इसे कैसे बना सकता हूं?

उत्तर

7

बिड्रोट आपके लिए एक सीएमके टूलचैन फ़ाइल उत्पन्न करता है। आपके Buildroot के आधार पर, यह सीधे output निर्देशिका में, या output/host/usr/share/buildroot में हो सकता है। फ़ाइल का नाम toolchainfile.cmake है। फिर, अपने CMake अनुप्रयोगों के निर्माण के कार्य करें:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/buildroot/output/host/usr/share/buildroot/toolchainfile.cmake

इस फ़ाइल पार संकलक रास्तों में से सभी परिभाषाओं, pkg-config वातावरण चर, हेडर हैं और स्थान पुस्तकालयों, आदि

+0

यह मेरे लिए नया है और बहुत अच्छा लगता है। – Cynede

2

सरल विधि के लिए, इस कार्य करें:

SET(CMAKE_C_COMPILER $(CROSS_COMPILE)gcc) 
SET(CMAKE_CXX_COMPILER $(CROSS_COMPILE)g++) 

जब CROSS_COMPILE चर बनाने के लिए पारित हो जाता है, यह पार संकलक पथ के साथ प्रतिस्थापित किया जाएगा।

अब, उचित तरीका। आदर्श रूप से, CROSS_COMPILE चर परिभाषित किया जाना चाहिए जब सीएमके चलाया जाता है क्योंकि यह क्रॉस-प्लेटफ़ॉर्म होने के लिए होता है। यदि दूसरे सीएमके जेनरेटर का उपयोग किया जाता है तो पहले समाधान का उपयोग करना तोड़ सकता है।

यह किया जा सकता है के रूप में:

IF(UNIX) 
    SET(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc) 
    SET(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++) 

तब चर को परिभाषित:

cmake -G "Unix Makefiles" -DCROSS_COMPILE=~/projects/buildroot/output/host/usr/bin/arm-linux- 

इस मामले में, CMake उचित निर्माण फ़ाइलें उत्पन्न होगा, CROSS_COMPILE या परिभाषित नहीं है कि क्या पर आधारित है।

+0

धन्यवाद, लेकिन यह वही नहीं है जो मैं चाहता हूं। और यहां कुछ बग: ~/परियोजनाओं/buildroot/output/host/usr/bin/arm-linux-; g ++: ऐसी कोई फ़ाइल या निर्देशिका – Cynede

+0

मैं – Cynede

+1

बनाने के लिए CROSS_COMPILE विकल्प को पास करना चाहता हूं, मैंने जवाब संपादित किया। लेकिन पहला विकल्प आपको अभी भी एक लिंकर त्रुटि दे सकता है। सीएमके को जनरेटर विशिष्ट सामान का उपयोग नहीं करना चाहिए जैसा कि आप करने की कोशिश कर रहे हैं। एक सीएमके जेनरेट मेकफ़ाइल बनाने के माध्यम से कंपाइलर वैरिएबल को पास करना नहीं चाहिए। सीएमके के माध्यम से मेकफ़ाइल उत्पन्न करते समय आपको क्रॉस कंपाइलर को परिभाषित करना चाहिए। दूसरा विकल्प अब काम करना चाहिए। – panickal

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