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

Windows下含条件表达式的Fortran项目Makefile语法错误求助

解决Windows下nmake执行Fortran Makefile的语法错误

错误原因

你遇到的U1034语法错误,核心原因是nmake(微软的Make工具)不支持GNU Make的ifeq条件判断语法,原Makefile中使用的ifeq是GNU Make专属语法,nmake无法识别,因此抛出语法错误。

修正后的Makefile代码

将原有的条件判断替换为nmake支持的!IF/!ELSE/!ENDIF语法,同时确保命令缩进符合nmake要求:

# Select Compiler
COMPILER = ifort
#COMPILER = gfortran

# Define the compiler switches
!IF "$(COMPILER)" == "gfortran"
    SWITCH = -O3 -Qopenmp
!ELSE
    SWITCH = /O3 /fast /Qipo /Qmkl=parallel /Qopenmp /Qparallel -qopt-matmul 
!ENDIF

#SWITCH = /Qmkl /Qopenmp /warn:all /check:all /traceback /heap-arrays0 
#GARBAGE = /fast /Qparallel /Qipo /Qprec-div- /QxHost  /heap-arrays0

SRCS = src\mod_utilities.f90 src\main.f90
    
EXEC = exe\run_win.exe

ifort:
	$(COMPILER) -fpp $(SWITCH) $(SRCS) -o $(EXEC) 
    
# Cleaning everything

clean:
	del *.mod
	del *.obj
	del *.pdb
	del *.ilk
	del $(EXEC)

#To compile in Windows, type:
# $ nmake /f makefile_win

关键改动说明

  • 替换条件判断语法:将GNU Make的ifeq ($(COMPILER), gfortran)改为nmake的!IF "$(COMPILER)" == "gfortran",变量需用双引号包裹,比较运算符为==,结尾用!ENDIF闭合。
  • 命令缩进检查:nmake要求目标下的命令行必须用Tab键缩进(不能用空格),建议确认缩进格式避免触发额外错误。
  • 变量赋值:nmake对变量赋值的空格要求宽松,保持代码一致性即可。

额外注意事项

如果需要同时兼容GNU Make和nmake,建议继续沿用不同平台的独立Makefile(如原代码中的makefile_mac和makefile_win),避免跨工具的语法冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:23:34