我开发了一个python包,它使用了带有OpenMP指令的fortran 90代码,并且我想使用numpy.distutils打包它。我遇到的问题是编译器标志和OpenMP库对于不同的fortran编译器都是不同的(例如-fopenmp和-lgomp用于gfortran和-openmp,-liomp5用于ifort)。
我发现一旦我知道编译器就可以成功传入编译器和链接标志。例如,如果我确定用户可以使用gfortran,
ext1 = numpy.distutils.core.Extension(
name = 'rabacus_fc',
sources = f90_paths,
extra_f90_compile_args = ["-fopenmp"],
extra_link_args = ["-lgomp"],
)
首先,我尝试在对Extension,
的调用中使用额外的关键字参数强制编译器 f2py_options = ["--fcompiler=gnu95"]
这将返回错误消息
running install
running bdist_egg
running egg_info
running build_src
build_src
building extension "rabacus_fc" sources
f2py options: ['--fcompiler=gnu95']
f2py:> build/src.linux-x86_64-2.7/rabacus_fcmodule.c
Unknown option '--fcompiler=gnu95'
如果有人知道如何正确传递f2py选项而不是有助于编译器选项。
接下来,我尝试确定是否有办法检测哪个编译器f2py和numpy.distutils将使用,然后使用此信息设置正确的标志。我没有在任何地方找到这个,这就是我被困的地方。