You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran条件式参数声明的实现方案咨询

Fortran条件式参数声明实现方案

针对你需要一套源码支持多组参数编译的需求,下面提供几种无需维护重复项目的可行方案:

方案一:利用Fortran预处理器(CPP)

大多数Fortran编译器(如gfortran、ifort)支持C预处理器(CPP),可以通过编译宏定义实现条件参数声明。

修改参数模块代码

将myparams.f90修改为带预编译条件的版本:

module myparams
    implicit none
    integer,parameter :: set = 
#ifdef SET_2
        2
#else
        1
#endif
    real,parameter    :: x = 
#ifdef SET_2
        3.0
#else
        2.0
#endif
end module myparams

编译不同版本

  • 编译set=1(x=2.0)的版本:
    gfortran -fpp main.f90 myparams.f90 -o main_set1
    
  • 编译set=2(x=3.0)的版本:
    gfortran -fpp -DSET_2 main.f90 myparams.f90 -o main_set2
    

注:ifort编译器可使用-fpp或-cpp选项启用预处理器。

方案二:用Makefile自动化多版本编译

编写Makefile简化编译流程,避免手动输入编译参数:

# 默认编译set=1版本
all: main_set1

# 编译set=1版本(x=2.0)
main_set1: main.f90 myparams.f90
	gfortran -fpp main.f90 myparams.f90 -o $@

# 编译set=2版本(x=3.0)
main_set2: main.f90 myparams.f90
	gfortran -fpp -DSET_2 main.f90 myparams.f90 -o $@

# 清理生成文件
clean:
	rm -f main_set1 main_set2 *.mod

使用方式:

  • 执行make生成set=1版本的可执行文件
  • 执行make main_set2生成set=2版本的可执行文件
  • 执行make clean清理编译产物

方案三:模板文件生成参数模块

若不想依赖预处理器,可通过模板文件结合文本替换生成对应参数模块:

创建模板文件myparams.template.f90

module myparams
    implicit none
    integer,parameter :: set = {{SET_VALUE}}
    real,parameter    :: x = {{X_VALUE}}
end module myparams

编写Makefile自动替换模板

TEMPLATE = myparams.template.f90

# 生成set=1的参数模块
myparams_set1.f90: $(TEMPLATE)
	sed 's/{{SET_VALUE}}/1/g; s/{{X_VALUE}}/2.0/g' $< > $@

# 生成set=2的参数模块
myparams_set2.f90: $(TEMPLATE)
	sed 's/{{SET_VALUE}}/2/g; s/{{X_VALUE}}/3.0/g' $< > $@

# 编译set=1版本
main_set1: main.f90 myparams_set1.f90
	gfortran main.f90 myparams_set1.f90 -o $@

# 编译set=2版本
main_set2: main.f90 myparams_set2.f90
	gfortran main.f90 myparams_set2.f90 -o $@

# 清理所有生成文件
clean:
	rm -f main_set1 main_set2 *.mod myparams_set1.f90 myparams_set2.f90

以上方案均只需维护一份核心源码,通过编译阶段的控制即可生成不同参数版本的程序,避免了多项目同步修改的麻烦。

内容的提问来源于stack exchange,提问作者Looper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:31:16