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
相关产品推荐
相关产品推荐

