我的代码大约有8,000行,并且包含在同一个bigcode.f90文件中。它使用带有选项的英特尔编译器从命令行编译没有问题:
mpif90 bigcode.f90 -r8 -O2 -xHost -override-limits -o output.out
我想将这个大文件拆分成模块并使用makefile链接它们。下面我列出了makefile。 (所以这里我有main.f90,还有8个模块链接到它,比如modparams.o和其他7)。所以我把bigcode.f90分成了9个文件。问题是,当我使用makefile编译时,它会抱怨像
这样的东西所有这些都可能是糟糕的风格。然而原始的bigcode.f90拥有所有这些,并没有阻止它编译。我想首先在bigcode.f90和拆分版本之间复制结果 - 然后我将进行其他更改。
我还制作了这个makefile的副本,没有任何OBJECTS链接(只有单个bigcode.f90),而且编译时没有任何抱怨。有人可以帮助我理解为什么有一个文件时编译器抱怨的内容与有多个链接文件时有什么不一致?
# DEFAULT FLAGS
CFLAGS := -I$(CPATH) -I$(F90_MODULES_PATH)
F90 := mpif90
# ADD ALL LIBRARIES HERE (with -l$LIBRARY_NAME)
LDFLAGS := -llapack -v
# ADD ALL SOURCE FILES HERE (with .o extension)
OBJECTS := modparams.o
OBJECTS += modleeplex.o
OBJECTS += modutilsmain.o
OBJECTS += modecon.o
OBJECTS += modindirect.o
OBJECTS += modijutils.o
OBJECTS += modselectstata.o
OBJECTS += modfcn.o
# ADD ADDITIONAL COMPILER FLAGS HERE
CFLAGS += -fbounds-check
CFLAGS += -ffree-line-length-350
CFLAGS += -r8
CFLAGS += -O2
CFLAGS += -xHost
CFLAGS += -override-limits
# ADD ADDITIONAL MODULE FOLDERS HERE (with -I$PATH_TO_FOLDER)
F90_MODULES += -I.
all: main
main: main.f90 $(OBJECTS)
$(F90) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $< -o $@
%.o : %.f90
$(F90) -c $< $(CFLAGS) $(F90_MODULES) $(LDFLAGS) -o $@
clean:
rm -rf $(OBJECTS) *.mod
当我编译时,我得到以下内容,然后是一长串错误。
mpif90 -c modfcn.f90 -I/opt/intel/composer_xe_2013.5.192/mkl/include:/opt/intel/composer_xe_2013.5.192/tbb/include:/opt/intel/composer_xe_20 13.5.192/mkl/include:/opt/intel/composer_xe_2013.5.192/tbb/include -I -fbounds-check -ffree-line-length-350 -r8 -O2 -xHost -override-lim its -I. -llapack -v -o modfcn.o
ifort: command line warning #10006: ignoring unknown option '-ffree-line-length-350'
ifort: command line remark #10010: option '-pthread' is deprecated and will be removed in a future release. See '-help deprecated'
ifort version 13.1.3