/ / मैं सशर्त रूप से ईमस्क्रिप्ट के लिए कोड कैसे संकलित कर सकता हूं? - सशर्त-संकलन, एम्सस्क्रिप्टेन

मैं emscripten के लिए कोड को सशर्त रूप से संकलित कैसे कर सकता हूं? - सशर्त-संकलन, emscripten

एक कोडबेस के साथ काम करना जो बिल्डिंग का समर्थन करता हैमल्टीपल ऑपरेटिंग सिस्टम के लिए, यह केवल समझदार है, जहां एम्सस्क्रिप्ट के लिए संशोधनों की आवश्यकता होती है, उन्हें एक ही कोडबेस में एकीकृत करने के लिए, सशर्त संकलन की सहायता से इसे अन्य वातावरण में काम करना जारी रखने के लिए आवश्यक है।

वहाँ कोई दस्तावेज नहीं लगता हैविषय, हालाँकि, जो मुझे बहुत घटिया लगता है, और न ही मुझे इसके बारे में कोई प्रश्न मिल सकता है, जो मुझे बहुत आश्चर्यचकित करता है - मुझे उम्मीद थी कि यह अच्छी तरह से ट्रोडडेन और -डोजेनडेड क्षेत्र होगा।

मैं यह कैसे कर सकता हूँ?

(मैंने देखा है tools/shared.py, यह सुझाव है कि लगता है #ifdef EMSCRIPTEN या #ifdef __EMSCRIPTEN__ इस्तेमाल किया जा सकता है; मैं अभी भी यह सवाल पूछ रहा हूं कि क्या मैं सही हूं, अगर यह करने का सही तरीका है, तो शायद इसका भी इस्तेमाल किया जाए।

उत्तर:

जवाब के लिए 8 № 1

इसके अनुसार प्रीप्रोसेसर में Emscripten का पता लगानाउपयोग करने के लिए सही परिभाषित है __EMSCRIPTEN__.

अक्टूबर 2016 में, एक सख्त बिल्ड मोड पेश किया गया था जो सक्षम होने पर, हटा देता है EMSCRIPTEN परिभाषित करते हैं। इसलिए ऐसा है नहीं उपयोग करने के लिए अनुशंसित EMSCRIPTEN हालांकि यह अभी भी गैर-सख्त बिल्ड मोड में काम करता है।


जवाब के लिए 4 № 2

#ifdef EMSCRIPTEN पसंदीदा तरीका AFAIK है।

के साथ अपने स्रोत कोड अव्यवस्थित करने से पहले #ifdefs, इस बारे में सोचें कि क्या कुछ प्लेटफ़ॉर्म पर निर्भर फ़ाइलों के लिए अधिक समझदारी नहीं होगी और बिल्ड टूल को काम करने दें।

इसके अलावा, emscripten पहले से ही परिभाषित करता है LINUX, क्योंकि यह एक लिनक्स सिस्टम की तरह बहुत संभालता है। आम तौर पर यह व्यवहार पहले से ही प्लेटफ़ॉर्म हैंडलिंग की आवश्यकता को ठीक करता है।


जवाब के लिए 2 № 3

यह मेरा वर्तमान समाधान है:

  • मेरे पास सामान्य लक्ष्य के साथ एक लिनक्स मेकफाइल है, यह पहले से उत्पन्न स्थिर पुस्तकालय को जोड़ता है और एक निष्पादन योग्य आउटपुट करता है।

  • WEB पर कोड ifdefs के साथ कार्य करता है।

  • लाइब्रेरी के लिए मेकफाइल मंच विशिष्ट स्रोतों के लिए TARGET पर्यावरण चर पर कार्य करता है:

ifeq ($ (TARGET), WEB) MODULES = RenderingEngine2.o RenderingEngine1.o WebApp.o main.o अन्य MODULES = RenderingEngine2.o RenderingEngine1.o LinuxApp.o main.o अगर अंत
  • Makefile के साथ निम्नलिखित सामग्री के साथ emscripten.sh नामक एक बैश स्क्रिप्ट है:
#!/ Bin / bash  TARGET = "WEB" CXX = "em ++ -DWEB" AR = "emar" मॉड्यूल बनाएं TARGET = "WEB" CXX = "em ++ -DWEB" AR = "emar" बनाएं emcc - फ़ाइल लोड करें -o bin / helloArrow.html बिन / helloArrow बिन / libo .o फ़ायरफ़ॉक्स बिन / helloArrow.html
  • संकलित करें और निष्पादित करें ./emscripten.sh

नोट: Emscripten doesn "t। स्थैतिक पुस्तकालयों में .a एक्सटेंशन की तरह लगता है इसलिए आप .o एक्सटेंशन के साथ पुस्तकालय का नाम दें।