Определяют переменную из Makefile в Fortran

#macros #fortran #c-preprocessor

#макросы #fortran #c-препроцессор

Вопрос:

Я хочу привести свои данные в соответствие с тем, !DIR$ ATTRIBUTES ALIGN:NBYTE::X где NBYTE определено во время компиляции. В настоящее время я нахожусь в верхней части каждого исходного файла, имеющего

  #ifndef NBYTE
  #define NBYTE 64
 #endif
  

Однако я не знаю, смогу ли я определить это только после того, как буду использовать NBYTE переменную везде.
Итак, мои два вопроса:

  1. Возможно ли определить макрос только один раз и использовать его везде, не включая файл или макрос в каждый исходный файл?

  2. Могу ли я определить переменную в Makefile и использовать ее в своем коде на Fortran?

Комментарии:

1. Какой компилятор вы используете?

2. Компилятор Fortran Intel

Ответ №1:

Большинство компиляторов позволяют предварительно обработать исходный код с помощью препроцессора C-типа. Одновременно они позволяют передавать макросы препроцессора через командную строку компилятора. В gfortran вы можете использовать следующий синтаксис:

-Dname=definition : Содержимое определения маркируется и обрабатывается так, как если бы оно появилось во время третьей фазы перевода в #define директиве. В частности, определение будет усечено встроенными символами новой строки.

Комментарии:

1. Итак, если я скажу -DNBYTE = 64 и добавлю этот флаг во время компиляции кода, так и будет

2. @A2LBK Для ifort это тот же синтаксис

3. @A2LBK да, но вам нужно убедиться, что ваш код предварительно обработан.

4. Да, я делаю это с флагом -fpp. Большое спасибо!