Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python3中f2py的Makefile_Python 3.x_Makefile_Cpython_F2py - Fatal编程技术网

Python 3.x python3中f2py的Makefile

Python 3.x python3中f2py的Makefile,python-3.x,makefile,cpython,f2py,Python 3.x,Makefile,Cpython,F2py,为了在python2中使用f2py构建扩展模块,我一直在使用类似于以下内容的Makefile: default: fortran_lib.so %.so:: %.f90 f2py -c -m $* $< 这过去工作得很好,make只会生成fortran_lib.so 现在我也想支持python3,但是当使用f2py3时,make会在我的特定设置上生成版本化的fortran_lib.cpython-35m-x86_64-linux-gnu.so 由于这与指定的目标名称不同,ma

为了在python2中使用f2py构建扩展模块,我一直在使用类似于以下内容的Makefile:

default: fortran_lib.so

%.so::  %.f90
    f2py -c -m $* $<
这过去工作得很好,make只会生成fortran_lib.so

现在我也想支持python3,但是当使用f2py3时,make会在我的特定设置上生成版本化的fortran_lib.cpython-35m-x86_64-linux-gnu.so

由于这与指定的目标名称不同,make无法识别目标是否已生成。因此,每次运行make时,它都会重新生成目标

如何在不必硬编码版本的情况下解决此问题

我可以告诉f2py3关闭版本控制吗? 我可以在Makefile中解决版本控制问题吗? 或者我必须切换到其他工具来构建扩展模块distutils,。。。?
我的建议是把版本控制留在上面,因为它的发明是有原因的。。。而是计算出它使用的后缀是什么。命令python3config-extensionsuffix得到了这个结果

因此,makefile看起来像

EXT_SUFFIX := $(shell python3-config --extension-suffix)

default: fortran_lib$(EXT_SUFFIX)

%$(EXT_SUFFIX): %.f90
    f2py3 -c -m $* $<
如果您不想使用shell获取EXT_后缀,那么您可能会想出一个通配符


我认为第二种选择比第一种更糟糕…

我的建议是将版本控制保留在其上,因为它是出于某种原因发明的。。。而是计算出它使用的后缀是什么。命令python3config-extensionsuffix得到了这个结果

因此,makefile看起来像

EXT_SUFFIX := $(shell python3-config --extension-suffix)

default: fortran_lib$(EXT_SUFFIX)

%$(EXT_SUFFIX): %.f90
    f2py3 -c -m $* $<
如果您不想使用shell获取EXT_后缀,那么您可能会想出一个通配符


我认为第二种选择比第一种更糟糕…

这正是我想要的。还不能投票,因为这正是我想要的。由于rep的原因,尚无法升级投票
%.so::  %.f90
    f2py3 -c -m $* $<
    mv $*$(EXT_SUFFIX) $@