我有一个
格式的Fortran程序PROGRAM main
USE a_one
USE a_two
...
END PROGRAM main
带有makefile:
# Paths
MDIR = ./main
SDIR = ./solver
ODIR = ./obj
CASE = $(SDIR)/CASE/test_
TOP = .
# include machine specific settings based on WLT_COMPILE_HOSTNAME environment variable
FC = ifort
CC = mpic++ #icc
LINKLIB = -lstdc++ -shared-intel -lifcore
FFLAGS = -fpp -O1 -DPTR_INTEGER8 -warn nousage -module $(ODIR) -g -traceback
CCFLAG = -O1 -g -DDATABASE_INTERFACE_LOWERCASE -DDATABASE_APPEND_UNDERSCORE
# Define rule to make .f90 and .f files
$(ODIR)/%.o : $(SDIR)/%.f90
$(FC) -c $(FFLAGS) $< -o $@
# Define rule to make C objects
$(ODIR)/%.cc.o : $(SDIR)/C++/%.cxx
$(CC) $(CCFLAG) -c $< -o $@
# Data structure type: Tree DB (C++ variable size nodes)
CC_OBJ = tree.cc.o
# set executable name based on DB and CASE
EXEC = $(dir ${CASE})/test_new.out
# Define list of all object files to be made
_OBJ = module_a.o module_b.o $(_CASE).o $(_CASE).PARAMS.o $(CC_OBJ)
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
MAIN_OBJ = $(ODIR)/main.o
All: my_main
my_main : $(OBJ) $(MAIN_OBJ)
$(FC) $(FFLAGS) $(OBJ) $(MAIN_OBJ) -o $(EXEC) $(LINKLIB)
正如您所看到的,除了fortran代码外,该程序中还使用了一些c ++代码。我正在尝试将此代码重构为子例程
SUBROUTINE main (in_matrix, out_matrix, n)
USE a_one
USE a_two
...
END SUBROUTINE main
并从python代码调用它。我遵循
中的指示https://modelingguru.nasa.gov/docs/DOC-2343使用“ f2py”来执行此操作,但无法使其正常工作。然后我意识到我有可能导致此问题的C ++代码。我想知道如何修改以上链接中的说明以考虑c ++代码。谢谢。