我应该使用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
答案 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