これは、Windows上でmingwのとMSVCの両方を使用してコンパイルするOpenMPの拡張子を取得するために私のために働いたLuperルーシュの答えの拡張バージョンです。 build_extをサブクラス化した後、cmdclass argのsetup.pyに渡す必要があります。 finalize_optionsの代わりにbuild_extensionsをサブクラス化すると、実際のコンパイラオブジェクトを調べることができるので、より詳細なバージョン情報を得ることができます。あなた結局ごとのコンパイラ、あたり拡張ベースでコンパイラフラグを設定できます
from distutils.core import setup, Extension
from distutils.command.build_ext import build_ext
copt = {'msvc': ['/openmp', '/Ox', '/fp:fast','/favor:INTEL64','/Og'] ,
'mingw32' : ['-fopenmp','-O3','-ffast-math','-march=native'] }
lopt = {'mingw32' : ['-fopenmp'] }
class build_ext_subclass(build_ext):
def build_extensions(self):
c = self.compiler.compiler_type
if copt.has_key(c):
for e in self.extensions:
e.extra_compile_args = copt[ c ]
if lopt.has_key(c):
for e in self.extensions:
e.extra_link_args = lopt[ c ]
build_ext.build_extensions(self)
mod = Extension('_wripaca',
sources=['../wripaca_wrap.c',
'../../src/wripaca.c'],
include_dirs=['../../include']
)
setup (name = 'wripaca',
ext_modules = [mod],
py_modules = ["wripaca"],
cmdclass = {'build_ext': build_ext_subclass })
出典
2011-03-04 10:49:56
Jon
私は同じ問題があります。私はmsvcのための余分な 'stdint.h'ヘッダをインクルードしたいが、他のコンパイラはインクルードしたくない。 –