Передача параметров cpp из заголовочного файла - PullRequest
0 голосов
/ 26 мая 2018

Я должен использовать код Fortran для предварительной обработки.Мой код работает нормально, если я пишу все определяемые переменные (макросы) явно одну за другой с помощью cpp

cpp -P -traditional -DMPI -DGFORTRAN -DMCT...-I... myfile.F

Но я намереваюсь предоставить их, используя два заголовочных файла.Один, в котором упоминаются все переменные определения, и второй, в котором снова определяются комбинации параметров определения.Поэтому я попытался,

cpp -P -traditional -D'HEADER="myheader.h"'
-D'GLOBAL_DEFS="globaldefinition.h"' -I... myfile.F

Я не знаю почему, но это не дает соответствующего вывода (я получаю только начальную и конечную строки своего кода, а не текст между ними).Кажется, что командная строка не читает заголовок и файл глобального определения.Я понятия не имею, что здесь не так, поскольку я не знаком с C ++.

Вот пример: когда я пишу

cpp -P -traditional -DMPI -DLINUX -DX86_64 -DGFORTRAN
-D'HEADER="myheader.h"' -DMCT_LIB -DMCT_INTERP_OC2AT -DCOUPLING -D'GLOBAL_DEFS="globaldefs.h"' -I/usr/local/include -I../../../bin.dir mct_dir_coupler_params.F

, я получаю

Module mct_dir_coupler_params
      USE mod_dir_coupler_kinds

      implicit none ! !  Number of coupling models. !
      integer :: N_mctmodels

! !  Sparse matrix weights !
      integer, dimension(:), pointer :: sparse_rows
      integer, dimension(:), pointer :: sparse_cols
      integer, dimension(:), pointer :: dst_grid_imask
      integer, dimension(2) :: src_grid_dims, dst_grid_dims
      real(m8), dimension(:), pointer :: sparse_weights

      TYPE T_DST_GRID
        integer, pointer :: dst_mask(:)
      END TYPE T_DST_GRID
      TYPE (T_DST_GRID), allocatable :: O2A_CPLMASK(:,:)
      TYPE (T_DST_GRID), allocatable :: A2O_CPLMASK(:,:)
      TYPE (T_DST_GRID), allocatable :: W2A_CPLMASK(:,:)

! !  Number of parallel nodes assigned to each model in the coupled !  system. !
      integer :: NnodesATM
      integer :: NnodesWAV
      integer :: NnodesOCN

END Module mct_dir_coupler_params

Но я хочу использовать

cpp -P -traditional -D'HEADER=myheader.h'
-D'GLOBAL_DEFS="globaldefs.h"' -I/usr/local/include -I../../../bin.dir mct_dir_coupler_params.F 

Вывод:

  MODULE mct_dir_coupler_params

  END MODULE mct_dir_coupler_params

1 Ответ

0 голосов
/ 26 мая 2018

Почему бы просто не использовать

#include "myheader.h"
#include "globaldefinition.h"

в ваших .cpp или .h файлах?

Редактировать: это будет работать: или, если вы состоите в браке с идеей дополнительного макроса, используйте

#include HEADER

Редактировать: чтобы использовать макросы C в файлах Fortran, вам понадобится компилятордирективы.Для Intel F77 это , похоже, /Qfpp, GNU Fortran должен автоматически вызывать cpp для файлов .F, если файлы, включающие директивы C-stye, включены через #include, а не INCLUDE ссылка

...