क्रॉस संकलन के लिए सीएमके का उपयोग करते समय, आम तौर पर CMAKE_TOOLCHAIN_FILE
विकल्प के माध्यम से टूलचैन फ़ाइल निर्दिष्ट करता है। GNU terminology में, कोई भी इस फ़ाइल का उपयोग कर होस्ट आर्किटेक्चर टूलसेट निर्दिष्ट कर सकता है। हालांकि, कोई आमतौर पर इस टूलचेन के साथ निर्मित कुछ भी निष्पादित करने में सक्षम होने की उम्मीद नहीं कर सकता है। अक्सर पर्याप्त, बिल्ड बिल्ड आर्किटेक्चर के लिए कुछ बिल्ड टूल्स को संकलित करने की आवश्यकता होती है।बिल्ड आर्किटेक्चर कंपाइलर का उपयोग करने के लिए सीएमके को कैसे निर्देशित करें?
निम्न सेटअप पर विचार करें। मेरे पास दो स्रोत फ़ाइलें genfoo.c
और bar.c
हैं। निर्माण के दौरान, genfoo.c
को संकलित और चलाने की आवश्यकता है। इसके आउटपुट को foo.h
पर लिखा जाना चाहिए। फिर मैं bar.c
संकलित कर सकता हूं, जो #include "foo.h"
है। चूंकि सीएमके मेजबान आर्किटेक्चर टूलचैन का उपयोग करने के लिए डिफ़ॉल्ट है, bar.c
के लिए निर्देश आसान हैं। लेकिन genfoo.c
संकलित करने के लिए बिल्ड आर्किटेक्चर टूलचेन का उपयोग करने के लिए मैं इसे कैसे कहूं? बस add_executable(genfoo genfoo.c)
कह रहा है गलत गलती का उपयोग करने के परिणामस्वरूप।
आप के रूप में कहा, जीएनयू शब्दावली में आप होस्ट आर्किटेक्चर निर्दिष्ट करने के लिए 'कॉन्फ़िगरेशन' कमांड का उपयोग करेंगे। और यदि आप दो अलग-अलग होस्ट वातावरण के लिए बनाना चाहते हैं तो आपको दो बार 'कॉन्फ़िगरेशन' चलाना होगा। तो मुझे सीएमके के साथ दो संभावनाएं दिखाई देती हैं: एक निर्माण स्क्रिप्ट का उपयोग करें जो आवश्यक दो वातावरण बनाता है और निष्पादित करता है (देखें [यहां] (http://stackoverflow.com/questions/30999130/cmake-build-multiple-targets-in- अलग- बिल्ड-निर्देशिका)) या [ExternalProject_Add()] (https://cmake.org/cmake/help/v3.2/module/ExternalProject.html) का उपयोग करें और अपने 'CMakeLists.txt' को समर्पित उपप्रोजेक्ट में विभाजित करें। – Florian
नहीं, autotools के साथ आप बस 'CC_FOR_BUILD' का उपयोग करते हैं। 'Ax_cc_for_build' देखें। – Helmut
ठीक है, उसे नहीं पता था। अगर मैं सही ढंग से समझता हूं तो हम [सीएमके क्रॉस कंपाइलिंग - निर्माण के दौरान बनाए गए निर्माण में निष्पादन योग्य का उपयोग करके वर्णित उपयोग के मामले के बारे में बात कर रहे हैं] (https://cmake.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build)? – Florian