2012-12-10 21 views
19

हैकेज में कुछ प्लेटफ़ॉर्म-विशिष्ट पुस्तकालय हैं जिन्हें मैं उपयोग करना चाहता हूं (उदा। इनोटिफ़ाई, क्यूक्यू)। हालांकि, सशर्त संकलन का उपयोग करके प्लेटफॉर्म के बीच स्विच करने के तरीके पर दस्तावेज़ थोड़ा सा स्पैस लगता है। मैं कुछ परेशानी प्रासंगिक दस्तावेज़ों को ढूंढने में हो रही है ...हास्केल में प्लेटफ़ॉर्म-स्वतंत्र कोड कैसे लिखें (ghc)

  1. कौन सा पूर्वप्रक्रमक परिभाषाओं मैं प्लेटफार्मों के बीच स्विच करने के लिए उपयोग कर सकते हैं?

  2. मैं क्रमशः linux/osx पर inotify/kqueue को शामिल/बहिष्कृत करने के लिए अपनी कैबल फ़ाइल कैसे स्थापित कर सकता हूं?

मुझे उम्मीद है कि यहां दस्तावेज होने पर दूसरों के लिए भी उपयोगी हो सकता है, इसलिए अन्य सामान्य प्लेटफॉर्म का उल्लेख करना उचित हो सकता है। जगह पर इस सामान को देखने के लिए मूर्खतापूर्ण है।

उत्तर

12
  1. सी पूर्वप्रक्रमक विकल्प -cpp (या {-# LANGUAGE CPP #-} का प्रयोग करके) के साथ संयोजन में os_HOST_OS झंडे पर एक नजर डालें रूप GHC documentation

  2. में कहा गया है अपने पैकेज विवरण के extensions: CPP के रूप में जोड़ें Cabal documentation में दिखाया गया है और परिभाषित इस तरह एक कस्टम झंडा:

    if os(linux) 
        cpp-options: -DINOTIFY 
    if os(darwin) 
        cpp-options: -DKQUEUE 
    

फिर आप अपने स्रोत में #ifdef का उपयोग कर सकते हैं।

+7

यदि संभव हो तो सीपीपी का उपयोग करने के बजाय, विभिन्न पैकेजों को शामिल करने के लिए os_HOST_OS का उपयोग करना पसंद किया जाता है। –

+4

यदि आप विभिन्न मॉड्यूल हैं जो विभिन्न ऑपरेटिंग सिस्टम के लिए अलग-अलग लिखे जाने की आवश्यकता है, तो आप संपूर्ण स्रोत पेड़ों के बीच चयन करने के लिए कैबल के 'ओएस 'ब्लॉक का भी उपयोग कर सकते हैं। 'Cpp-options' ब्लॉक को अंदर डालने के बजाय, लेकिन 'hs-source-dirs' ब्लॉक अंदर। –

+0

धन्यवाद, अच्छा जवाब –

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