Holen Sie sich die Befehle distutils übergibt an den Compiler

Lets sagen, ich habe diesen Python-Code in einem setup.py Skript, um eine C-Erweiterung zu erstellen:

 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]) 

Leicht genug. Jetzt rufe ich das setup.py Skript mit dieser Zeile an:

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

Ok, aber was ist die Frage?

Wenn distutils mingw32 anruft und alle notwendigen und betriebssystemunabhängigen Flaggen und Optionen an sie weitergibt, wie sieht man diese Flaggen aus?

Wo bleibt distutils die Befehle im Zusammenhang mit jeder Plattform und wie kann ich auf sie zugreifen?

  • Vervollständigen Sie als-Sie-Typ auf Befehlszeile mit Python
  • Würde Python einen guten Ersatz für die Windows-Befehlszeilen- / Batch-Skripte machen?
  • Wie kann ich Befehlszeilenargumente in Python verarbeiten?
  • Python: Wie kann man in optparse eine Option machen?
  • Kann Python's argparse permut Argument Ordnung wie gnu getopt?
  • Ein Python-Skript auf alle Dateien in einem Verzeichnis ausführen
  • One Solution collect form web for “Holen Sie sich die Befehle distutils übergibt an den Compiler”

    Es ist nicht so einfach wie eine Reihe von Optionen, aber Sie können sehen, wie es funktioniert. In deinem Python-Quellverzeichnis suche das nach

     distutils/ccompiler.py 

    In dieser Datei hat jeder Compiler einen Eintrag wie diesen

     # 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"), } 

    Sie finden den Code, den Sie suchen in

     distutils/cygwinccompiler.py 

    Wenn Sie Ihr setup.py-Skript bearbeiten und dieses hinzufügen

     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]) 

    Sie können sehen, einige der Optionen zur Verfügung …

     {'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} 

    Um auf einzelne Optionen zuzugreifen, können Sie sie wie folgt verwenden …

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

    Es gibt keine einfachen Fahnen. Viele der Flags sind zur Laufzeit konfiguriert und der obige Code zeigt, dass du schauen möchtest, um zu sehen, wie sie erzeugt werden usw.

    Python ist die beste Programmiersprache der Welt.