2013-11-28 2 views
6

Я написал небольшой фрагмент кода, пытаясь придерживаться стандарта Fortran 2003. Код available on github.Исправить суффикс для исходного файла Fortran 2003 - компилятор Intel Fortran

Это мой 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 [email protected] $< $(FLGS) 

#build targets 

gnu-amd64-linux: $(OBJ) 
     $(FC) -o [email protected] $^ $(FLGS) 

clean: gnu-amd64-linux 
     rm *.o 

Код компилируется без проблем, используя вышеупомянутую Makefile и gfortran.

Однако, если я пытаюсь скомпилировать его с iFort, используя только

ifort -o ifort-amd64-linux unit-test-hadvppm.f03 hadvppm.f03 

он не работает, смотрите вывод ниже. Я полагаю, что это связано с бесплатным файловым форматом .f03. Есть ли флаг в iFort, похожий на флаг gstran -std = f2003? Я пытался найти это в документации iFort, должен ли я выглядеть сложнее?

enter image description here

+3

Почему бы просто не переименовать ваши файлы в '* .f90' или' * .F90'? Окончание файла не должно зависеть от стандарта ;-) Я в основном код в Fortran 2003/2008 и * always * use '* .F90'. У меня были проблемы с некоторыми компиляторами при использовании' * .F03' несколько лет назад, которые исчезли после переименования файлов. –

+0

@AlexanderVogt спасибо, я попробую! – seb

+2

Возможно, стоит отметить, что несколько компиляторов для Linux (включая ifort) по умолчанию интерпретируют расширение '.F90' как файлы, которые должны быть переданы в препроцессор. Конечно, дело в том, следует ли использовать только расширение верхнего регистра или и то, и другое. – sigma

ответ

12

Там нет ничего в стандарте, который определяет суффикс файлов. Intel всегда заявляла, что они обрабатывают *.f90 как суффикс для формата свободного источника, независимо от стандартной версии. Это просто соглашение, не основанное на каком-либо стандартном документе.

Возможно, суффикс f90 малоприбыль, похожий только на Fortran 90, но вы не должны стесняться использовать его для каждого исходного файла в свободном формате.

Лично я также не люблю практику .f95, .f03, .f08 файлов. Должен ли я переименовать исходный файл только потому, что я вызываю некоторые внутренние из более нового стандарта?

+0

Если нет стандартного и Я не использую компилятор fortran от Intel, тогда это имеет значение? Кажется сомнительным принять один из соглашений компилятора и рассматривать их как спецификацию языка. –

+0

Почему бы просто не использовать суффикс '.f'? Обратите внимание, что когда я это делаю, мне нужно иметь 7 пробелов перед каждой строкой, поэтому кажется, что суффиксы сообщают компилятору, какие функции включить, что является довольно хорошим аргументом для суффикса '.f08'. –

+0

Дело в том, что все компиляторы поддерживают .f90, зачем использовать что-нибудь еще? f90 не является Fortran 90, это форма свободного источника. Я надеюсь, что люди не придут с файлами f15 ... –

4

Вы можете указать исходную форму, используемую в исходном файле, с использованием параметров командной строки -free и -fixed ifort для свободной и фиксированной формы соответственно.

В качестве отдельной проблемы вы можете установить стандарт для диагностики с использованием опции -stand [: xxx]. Это не изменяет код, сгенерированный компилятором, он просто меняет диагностику, которую компилятор задает. Это эквивалент опции -std = xxx gfortran.

В качестве отдельной отдельной проблемы вы можете указать, что компилятор должен изменить свое поведение так, чтобы оно соответствовало стандарту Fortran, используя параметр -standard-semantics compiler. Это охватывает сценарии, в которых поведение компилятора исторически отличалось от того, что в соответствии со стандартом Fortran требовал или рекомендовал.

Как рекомендовано в комментариях и ответе Владимира - самым простым вариантом является просто использовать .f90 для любого бесплатного исходного файла формы (который будет рассматриваться как бесплатный источник формы ifort при отсутствии опции -fixed командной строки) , независимо от стандарта, на который он был записан.

Смежные вопросы