LINUX.ORG.RU

xlf90 IBM fortran + препроцессор


0

0

есть код на фортране в котором присутствуют дерективы типа #define #include #ifdef. Что бы компилятор их понял нужен запуск препроцессора. Вроде как xlf90 понимает это когда имя файла заканчивается на F90 (F-заглавна), но есть проблема. Когда встречается в коде директива #include «config.h» он подключает конфиг, но не запускает препроцессор на config.h. Может есть какая опция что бы айбиэмовский компилятор запускал препроцессор на все файлы подключенные к данному исходнику через директиву #include?

Ответ на: комментарий от Begemoth

это для gfortran прокатывает а на айбиэме - падает если cpp вручную на исходник натравливать:

cpp -x c -I. -I../.. src.F90 src_fixed.F90

то вроде прокатывает, но там столько файлов что я с ума сойду. В принципе всего две инклюды config.h и abi_common.h может их можно переделать. Где-то вычитал, что надо все # на ! поменять. Правда что ли?

DonPedro123
() автор топика
Ответ на: комментарий от DonPedro123

Не знаю относительно замены «#» на "!", но если я правильно помню, то в расширении Fortran 77 появился оператор INCLUDE 'имя_файла', именно оператор, а не деректива препроцессора. Может ваш компилятор понимает этот оператор.

то вроде прокатывает, но там столько файлов что я с ума сойду.

пишите скрипт на shell'е.

mky ★★★★★
()

Может попробовать

cc -E fortran.F90 > fortran.f90 xlf90 fortran.f90 ...

atoku ★★★
()
cc -E fortran.F90 > fortran.f90
atoku ★★★
()

Fixed?

Нашел багу. В конфиге mpif90 была строка передающая cpp ключ -C - шняга которая в коде после препроцессора оставляет комменты и поэтому сбоит с дерективами начинающимеся с #.

-C Do not discard comments. All comments are passed through to the output file, except for comments in processed directives, which are deleted along with the directive. You should be prepared for side effects when using -C; it causes the preprocessor to treat comments as tokens in their own right. For example, comments appearing at the start of what would be a directive line have the effect of turning that line into an ordinary source line, since the first token on the line is no longer a #.

убрал и продвинулся в компиляции дальше, но не до конца :)

DonPedro123
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.