python कम्पाइलर के पास डिस्टिल्टल्स पास होने वाले आदेश प्राप्त करें



gcc command-line (1)

चलिए कहते हैं कि मेरे पास एक पायथन कोड है जो सी एक्सटेंशन को बनाने के लिए setup.py स्क्रिप्ट में है:

from distutils.core import setup, Extension

module1 = Extension('demo', sources = ['demo.c'])

setup (name = 'PackageName',
       version = '1.0',
       description = 'This is a demo package',
       ext_modules = [module1])

काफी आसान। अब मैं setup.py स्क्रिप्ट को इस लाइन के साथ कॉल करता हूं:

C:/> python setup.py build_ext --compiler=mingw32

ठीक है, लेकिन सवाल क्या है?

जब distutils mingw32 कॉल करता है और सभी आवश्यक और ऑपरेटिंग सिस्टम स्वतंत्र झंडे और विकल्प इसे पास करता है, यह उन ध्वनियों को कैसे पहचानता है?

Distutils प्रत्येक मंच से संबंधित आदेशों को कहां रखता है, और मैं उनसे कैसे पहुंच सकता हूं?

https://code.i-harness.com


यह विकल्पों के एक सेट के रूप में सरल नहीं है लेकिन आप देख सकते हैं कि यह कैसे काम करता है। इस के लिए अपने अजगर स्रोत निर्देशिका में देखें

distutils/ccompiler.py

उस फ़ाइल में प्रत्येक कंपाइलर की इस तरह एक प्रविष्टि है

# Map compiler types to (module_name, class_name) pairs -- ie. where to
# find the code that implements an interface to this compiler.  (The module
# is assumed to be in the 'distutils' package.)
compiler_class = { 'unix':    ('unixccompiler', 'UnixCCompiler',
                               "standard UNIX-style compiler"),
                   'msvc':    ('msvccompiler', 'MSVCCompiler',
                               "Microsoft Visual C++"),
                   'cygwin':  ('cygwinccompiler', 'CygwinCCompiler',
                               "Cygwin port of GNU C Compiler for Win32"),
                   'mingw32': ('cygwinccompiler', 'Mingw32CCompiler',
                               "Mingw32 port of GNU C Compiler for Win32"),
                   'bcpp':    ('bcppcompiler', 'BCPPCompiler',
                               "Borland C++ Compiler"),
                   'emx':     ('emxccompiler', 'EMXCCompiler',
                               "EMX port of GNU C Compiler for OS/2"),
                 }    

आप उस कोड को पा सकते हैं जिसमें आप ढूंढ रहे हैं

distutils/cygwinccompiler.py

यदि आप अपनी setup.py स्क्रिप्ट को संपादित करते हैं और इसे जोड़ें

from distutils.core import setup,Extension
from distutils.cygwinccompiler import Mingw32CCompiler
from pprint import pprint

module1 = Extension('demo', sources = ['demo.c'])

m32 = Mingw32CCompiler()
pprint (vars(m32))


setup (name = 'PackageName',
   version = '1.0',
   description = 'This is a demo package',
   ext_modules = [module1])

आप उपलब्ध विकल्पों में से कुछ को देख सकते हैं ...

{'archiver': ['ar', '-cr'],
 'compiler': ['gcc', '-O', '-Wall'],
 'compiler_cxx': ['g++', '-O', '-Wall'],
 'compiler_so': ['gcc', '-mdll', '-O', '-Wall'],
 'dll_libraries': None,
 'dllwrap_version': None,
 'dry_run': 0,
 'force': 0,
 'gcc_version': LooseVersion ('4.2.1'),
 'include_dirs': [],
 'ld_version': None,
 'libraries': [],
 'library_dirs': [],
 'linker_dll': 'dllwrap',
 'linker_exe': ['gcc'],
 'linker_so': ['dllwrap', '-mdll', '-static'],
 'macros': [],
 'objects': [],
 'output_dir': None,
 'preprocessor': None,
 'ranlib': ['ranlib'],
 'runtime_library_dirs': [],
 'verbose': 0}

व्यक्तिगत विकल्पों को एक्सेस करने के लिए आप उन्हें निम्नानुसार उपयोग कर सकते हैं ...

print m32.compile
['gcc', '-O', '-Wall']

झंडे का कोई सरल सेट नहीं है बहुत सारे झंडे रनटाइम पर कॉन्फ़िगर किए जाते हैं और ऊपर दिए गए कोड से पता चलता है कि आप यह देखना चाहते हैं कि वे कैसे उत्पन्न हुए हैं आदि।





distutils