Python 3.x python3中f2py的Makefile
为了在python2中使用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
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) $@