Gfortran директивы препроцессора для различных операционных систем - PullRequest
4 голосов
/ 26 декабря 2011

Подскажите, пожалуйста, как мне сделать следующее:

#if __unix__
#define path_sep='/'
#elif __windows__
#define path_sep='\'
#else
#error "path_sep not defined."
#endif

с помощью компилятора gfortran.

1 Ответ

9 голосов
/ 26 декабря 2011

Это можно сделать в сочетании с условной компиляцией и с помощью опции «D» в командной строке. Вот пример кода:

program test_Dopt
character (len=1) :: pathsep
pathsep = "?"
#ifdef WOS
   pathsep = "\"
#endif
#ifdef UOS
   pathsep = "/"
#endif

write (*, '( "pathsep is >", A1, "<")' )  pathsep

end program test_Dopt

Назовите программу с типом файла F90, чтобы gfortran запустил препроцессор, или используйте -cpp в строке компиляции. Затем передайте параметры препроцессору, включив их после D в строку компиляции, например, gfortran -DWOS. (Это более общий подход, чем gfortran - большинство компиляторов Fortran будут обрабатывать директивы препроцессора в стиле C.) Затем вы можете идентифицировать ОС вне Fortran и передавать информацию в программу Fortran.

Вы можете скомпилировать свой код, используя тип файла F90 или -cpp.

...