Правильный суффикс для исходного файла Fortran 2003-компилятор Intel Fortran
Я написал небольшой фрагмент кода, пытаясь придерживаться стандарта Fortran 2003. Код доступно на 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
он не работает, см. ниже. Полагаю, это имеет отношение к ... бесплатный файл Ф03 формат. Есть ли флаг в iFort, подобный флагу gfortran-std=f2003? Я попытался найти это в документации iFort, должен ли я искать сложнее?
2 ответов
в стандарте нет ничего, что указывало бы суффикс файлов. Intel всегда заявляла, что они лечат *.f90
в качестве суффикса для формата free source независимо от стандартной версии. Это просто конвенция, не основанная на каком-либо стандартном документе.
может быть f90
суффикс немного неудачный, похожий только на Fortran 90, но вы не должны стесняться использовать его для каждого исходного файла свободного формата.
лично мне тоже не нравится практика .f95
,.f03
, .f08
файлы. Должен ли я переименовать исходный файл только потому, что я вызываю некоторые встроенные из более нового стандарта?
вы можете указать исходную форму, используемую в исходном файле, используя параметры командной строки-free и-fixed ifort, для свободной и фиксированной формы соответственно.
в качестве отдельной проблемы вы можете установить стандарт для диагностики с использованием опции-stand [: xxx]. Это не изменяет код, созданный компилятором, он просто изменяет диагностику, которую выдает компилятор. Это эквивалентно компилятором gfortran по -СТД=ХХХ.
Как еще один отдельный вопрос, вы можно указать, что компилятор должен изменить свое поведение в соответствии с указанным с помощью стандарта Fortran, используя параметр компилятора-standard-semantics. Это охватывает сценарии, в которых поведение компилятора исторически отличалось от того, что стандарт Fortran в конечном итоге требует или рекомендует.
как рекомендовано в комментариях и ответе Владимира-самый простой вариант-просто использовать .f90 для любого исходного файла свободной формы (который будет рассматриваться как источник свободной формы ifort при отсутствии опции-фиксированной командной строки), независимо от стандарта, на который она была написана.