このモジュールは CCompilerクラスの抽象ベースクラスを提供します。 CCompilerのインスタンスはプロジェクトにおける全てのコンパイルお よびリンクに使われます。 コンパイラのオプションを設定するためのメソッドが提供されます -- マク ロ定義、includeディレクトリ、リンクパス、ライブラリなど。
このモジュールは以下の関数を提供します。
| compiler, library_dirs, runtime_library_dirs, libraries) |
| macros, include_dirs) |
| osname, platform) |
問い合わせのosnameはPython標準のOS名(os.nameで返されるもの)のひとつであるべき で、platformはsys.platformで返される共通の値です。
パラメータが指定されていない場合のデフォルト値はos.nameと sys.platformです。
plat=None, compiler=None, verbose=0, dry_run=0, force=0) |
os.name (例: 'posix', 'nt'), compiler)、
compilerのデフォルト値はプラトフォームのデフォルトコンパイラです。
現在は 'posix'と'nt'だけがサポートされています、デフォルトのコンパイラは
``traditional Unix interface''(UnixCCompilerクラス) と、
Visual C++(MSVCCompiler クラス) です。
WindowsでUnixコンパイラオブジェクトを要求することも、UnixでMicrosoft
コンパイラオブジェクトを要求することも可能です。compiler引数を与えると platは無視されます。
| ) |
build,
build_ext, build_clibの、--help-compilerオプションで使われます。)
[verbose=0, dry_run=0, force=0]) |
抽象ベースクラス CCompilerは実際のコンパイラクラスで実装される必要のある インタフェースを定義しています。このクラスはコンパイラクラスで利用されるユーティリティメソッドも定義しています。
コンパイラ抽象クラスの基本的な前提は、各インスタンスはあるプロジェクトを ビルドするときの全コンパイル/リンクで利用できるということです。 そこで、コンパイルとリンクステップで共通する属性 -- インクルードディレクトリ、マクロ定義、リンクするライブラリ など -- はコンパイラインスタンスの 属性になります。 どのように各ファイルが扱われるかを変更できるように、ほとんどの 属性はコンパイルごと、またはリンクごとに与えることができます。
各サブクラスのコンストラクタは Compiler クラスのインスタンスを作ります。
フラグは verbose(冗長な出力を表示します)、
dry_run(実際にはそのステップを実行しません)、
そしてforce(依存関係を無視して全て再ビルドします)です。
これらのフラグは全てデフォルト値が0(無効)になっています。
CCompilerまたはサブクラスを直接インスタンス化したくない場合には、
かわりにdistutils.CCompiler.new_compiler()ファクトリ関数を利用してください。
以下のメソッドで、Compilerクラスのインスタンスが使うコンパイラオプションを手動で変更できます。
| dir) |
| dirs) |
| libname) |
リンカはadd_library()とset_library() で渡された順にライブラリをリンクしようとします。ライブラリ名が重なることは 問題ありません。リンカは指定された回数だけライブラリとリンクしようとします。
| libnames) |
| dir) |
| dirs) |
| dir) |
| dirs) |
name[, value=None]) |
| name) |
| object) |
| objects) |
以下のメソッドはコンパイラオプションの自動検出を実装しており、 GNU autoconfに似たいくつかの機能を提供します。
| sources) |
dirs, lib[, debug=0]) |
Noneを返します。
funcname [, includes=None, include_dirs=None, libraries=None, library_dirs=None]) |
| dir) |
| lib) |
| dir) |
| **args) |
| attribute | description |
|---|---|
| C/C++ コンパイラ | |
| シェアードオブジェクト、ライブラリを作るために使う リンカ | |
| バイナリ実行可能ファイルを作るために使うリンカ | |
| 静的ライブラリを作るアーカイバ |
コマンドラインをもつプラットフォーム(Unix, DOS/Windows)では、それぞれ の文字列は実行ファイル名と(省略可能な)引数リストに分割されます。(文字 列の分割は Unix のシェルが行うものに似ています: 単語はスペースで区 切られますが、クォートとバックスラッシュでオーバーライドできます。 distutils.util.split_quoted()をごらんください。)
以下のメソッドはビルドプロセスのステージを呼び出します。
sources[, output_dir=None, macros=None, include_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, depends=None]) |
sources はファイル名のリストである必要があります。おそらく C/C++ ファイルですが、実際にはコンパイラとコンパイラクラスで扱えるもの(例: MSVCCompilerはリソースファイルを sourcesにとることができ ます)なら何でも指定できます。 sourcesのソースファイルひとつずつ に対応するオブジェクトファイル名のリストを返します。実装に依存しますが、 全てのソースファイルがコンパイルされる必要はありません。しかし全ての対 応するオブジェクトファイル名が返ります。
もし output_dirが指定されていれば、オブジェクトファイルはその下 に、オリジナルのパスを維持した状態で置かれます。 つまり、 foo/bar.cは通常コンパイルされてfoo/bar.oになります (Unix実装の場合)が、もしoutput_dirが buildであれば、 build/foo/bar.oになります。
macrosは(もし指定されていれば)マクロ定義のリストである必要があり
ます。
マクロ定義は(name, value)という形式の2要素のタプル、または
(name,)という形式の1要素のタプルのどちらかです。前者はマクロを定
義します。もしvalueがNoneであれば、マクロは特定の値をもたないで
定義されます。1要素のタプルはマクロ定義を削除します。後で実行された定
義/再定義/削除が優先されます。
include_dirsは(もし指定されていれば)文字列のリストである必要があ ります。このコンパイルだけで有効な、デフォルトのインクルードファイル の検索ディレクトリに追加するディレクトリ群を指定します。
debugはブーリアン値です。もし真なら、コンパイラはデバッグシンボ ルをオブジェクトファイルに(または別ファイルに)出力します。
extra_postargsとextra_postargsは実装依存です。 コマンドラインをもっているプラットフォーム(例 Unix, DOS/Windows)では、 おそらく文字列のリスト: コンパイラのコマンドライン引数の前/後に追加す るコマンドライン引数です。他のプラットフォームでは、実装クラスのドキュ メントを参照してください。どの場合でも、これらの引数は抽象コンパイラフ レームワークが期待に沿わない時の脱出口として意図されています。
dependsは(もし指定されていれば)ターゲットが依存しているファイル 名のリストです。ソースファイルが依存しているファイルのどれかより古けれ ば、ソースファイルは再コンパイルされます。これは依存関係のトラッキング をサポートしていますが、荒い粒度でしか行われません。
失敗するとCompileErrorを起こします。
objects, output_libname[, output_dir=None, debug=0, target_lang=None]) |
output_libnameはライブラリ名で、ファイル名ではありません; ファイ ル名はライブラリ名から作られます。output_dirはライブラリファイル が起かれるディレクトリです。
debugはブール値です。真なら、デバッグ情報がライブラリに含まれま す(ほとんどのプラットフォームではコンパイルステップで意味をもちます: debugフラグは一貫性のためにここにもあります。)。
target_lang はオブジェクトがコンパイルされる対象になる言語です。 これはその言語特有のリンク時の処理を可能にします。
失敗すると LibError を起こします。
target_desc, objects, output_filename[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None]) |
「元ファイル群」はobjectsで指定されたオブジェクトファイルのリス トを基礎にしています。output_filename はファイル名です。もし output_dirが指定されていれば、それに対する相対パスとして output_filenameは扱われます(必要ならばoutput_filename はディ レクトリ名を含むことができます。)。
librariesはリンクするライブラリのリストです。 これはファイル名ではなくライブラリ名で指定します。プラットフォーム依存 の方式でファイル名に変換されます(例: foo はUnix では libfoo.a に、DOS/Windowsでは foo.lib になります。 )。ただしこれらはディレクト リ名を含むことができ、その場合はリンカは通常の場所全体を探すのではなく 特定のディレクトリを参照します。
library_dirsはもし指定されるならば、修飾されていない(ディレクト リ名を含んでいない)ライブラリ名で指定されたライブラリを探索する ディレクトリのリストです。これはシステムのデフォルトより優先され、 add_library_dir() と/または set_library_dirs()に渡さ れます。runtime_library_dirsは共有ライブラリに埋め込まれるディレ クトリのリストで、実行時にそれが依存する共有ライブラリのパスを指定しま す(これはUnixでだけ意味があるかもしれません。)。
export_symbolsは共有ライブラリがエクスポートするシンボルのリストです。 (これはWindowsだけで意味があるようです。)
debugは compile() や create_static_lib()と同じですが、 少しだけ違いがあり、(create_static_lib()ではdebugフラグ は形式をあわせるために存在していたのに対して)ほとんどのプラットフォー ムで意識されます。
extra_preargs と extra_postargs は compile() と同じですが、コンパイラではなくリンカへの引数として扱われます。
target_langは指定されたオブジェクトがコンパイルされた対象言語で す。リンク時に言語特有の処理を行えるようにします。
失敗すると LinkError が起きます。
objects, output_progname[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, debug=0, extra_preargs=None, extra_postargs=None, target_lang=None]) |
objects, output_libname[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None]) |
objects, output_filename[, output_dir=None, libraries=None, library_dirs=None, runtime_library_dirs=None, export_symbols=None, debug=0, extra_preargs=None, extra_postargs=None, build_temp=None, target_lang=None]) |
source[, output_file=None, macros=None, include_dirs=None, extra_preargs=None, extra_postargs=None]) |
失敗すると PreprocessError が起きます。
以下のユーティリティメソッドは具体的なサブクラスで使うために、 CCompilerクラスで定義されています。
basename[, strip_dir=0, output_dir='']) |
libname[, lib_type='static', strip_dir=0, output_dir='']) |
'static'の場合、liblibname.aの
形式を返し、lib_type が 'dynamic' の場合は
liblibname.soの形式を返します。
source_filenames[, strip_dir=0, output_dir='']) |
basename[, strip_dir=0, output_dir='']) |
func, args[, msg=None, level=1]) |
| cmd) |
name[, mode=511]) |
| src, dst) |
msg[, level=1]) |
| msg) |
| msg) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。