从头文件传递cpp选项

时间:2018-05-26 07:14:26

标签: c++ fortran

我应该使用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 :(得分:1)

为什么不简单地使用

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

在您的.cpp.h个文件中?

编辑:这将有效:或者,如果您与额外的宏观想法结合,请使用

#include HEADER

编辑:要在Fortran文件中使用C宏,您需要一个编译器指令。对于英特尔F77,seems to be /Qfpp,只要包含C-stye指令的文件包含在#include中,而不是{{1},GNU Fortran就会自动为.F文件调用cpp }} link