我写了一小段代码,试图遵守Fortran 2003标准。代码为available on github。
这是我的makefile:
FC = gfortran
FLGS = -g -pg -std=f2003 -I. -fbounds-check
DEPS = camx.prm
OBJ = unit-test-hadvppm.o hadvppm.o
#linker macro
%.o: %.f03 $(DEPS)
$(FC) -c -o $@ $< $(FLGS)
#build targets
gnu-amd64-linux: $(OBJ)
$(FC) -o $@ $^ $(FLGS)
clean: gnu-amd64-linux
rm *.o
使用上面的makefile和 gfortran 编译代码没有问题。
但是,如果我尝试使用iFort编译它,只需使用
ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03
它不起作用,请参阅下面的输出。我想这与.f03免费文件格式有关。 iFort中有一个标志,类似于gfortran的-std = f2003标志吗?我试着在iFort文档中找到这个,如果我看起来更难?
答案 0 :(得分:13)
标准中没有任何内容指定文件的后缀。英特尔总是声明,无论标准版本如何,它们都将*.f90
视为免费源格式的后缀。这只是一个不基于任何标准文件的惯例。
也许f90
后缀有点不幸,看起来只是为了Fortran 90,但你应该毫不犹豫地将它用于每个自由格式的源文件。
就个人而言,我也不喜欢.f95
,.f03
,.f08
文件的做法。我应该重命名源文件只是因为我从较新的标准中调用了一些内在函数吗?
答案 1 :(得分:5)
您可以使用-free和-fixed ifort命令行选项分别指定源文件中使用的源表单,分别用于免费和固定表单。
作为单独的问题,您可以设置标准以使用-stand [:xxx]选项发出诊断。这不会更改编译器生成的代码,只会更改编译器发出的诊断信息。这相当于gfortran的-std = xxx选项。
作为另一个单独的问题,您可以指定编译器应使用-standard-semantics编译器选项更改其行为以匹配使用Fortran标准指定的行为。这涵盖了编译器的行为历史上与Fortran标准最终要求或推荐的行为不同的情况。
根据评论中的建议和Vladimir的回答 - 最简单的选择是对任何自由格式源文件使用.f90(在缺少-fixed命令行选项的情况下,ifort将被视为自由格式源),无论它被写入的标准如何。