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

macOS下Intel Fortran编译时makefile报循环依赖丢弃错误如何解决

问题根因
  • 顶层makefile调用子makefile时未传入必填的OUT变量。该项目的make规则设计要求必须指定OUT作为最终生成的可执行文件名,直接执行make -f makefile时,release.makefile中PROG = $(OUT)取值为空,直接导致目标规则匹配逻辑混乱。
  • release.makefile存在拼写错误:链接选项变量名错写为LDFLAFS(F与L顺序颠倒),正确变量名应为LDFLAGS,即使解决循环依赖问题,后续链接阶段也会因找不到链接参数报错。
  • release.makefile中%: %.o是无范围限制的全匹配隐式规则,make会自动尝试将目录下所有存在的文件(包括makefile本身、.f90源码文件)套入该规则+%.o: %.f90编译规则做生成匹配,同时make默认会尝试重建自身加载的makefile文件,最终触发循环依赖检测,抛出你看到的依赖丢弃报错。
  • 额外注意:release.makefile中写死了SuiteSparse库的绝对路径为/Users/josie/Desktop/...,如果你本地存放SuiteSparse库的位置和这个路径不一致,后续链接阶段会报找不到库的错误,需要同步修改。
修复步骤
  1. 修改顶层makefile中所有调用子make的目标,补上OUT参数,参数值为你想要生成的可执行文件名即可,以release目标为例:
release:
    # ENV = /opt/intel/oneapi/setvars.sh intel64
    make -f release.makefile OUT=steady_state

debug、hpcrelease、compilesubmit等其他调用子makefile的目标,都要在make命令后补上相同的OUT参数。
2. 打开release.makefile,把变量名写错的那行LDFLAFS = -m64 ...改成LDFLAGS = -m64 ...,和后续链接命令中引用的$(LDFLAGS)变量名保持一致。
3. 直接删除release.makefile中%: %.o这行多余规则——整个编译流程中唯一需要生成的可执行文件是$(PROG).out,已经单独写了明确的链接规则,这条全匹配规则没有实际作用,只会导致隐式规则乱匹配。
4. 如果本地SuiteSparse库存放路径和makefile里写死的路径不一致,同步修改FCFLAGS和LDFLAGS中的-L后面的库路径,指向你本地SuiteSparse的lib目录实际位置。

验证方法

修改完成后先执行make clean清除之前生成的.o、.mod等缓存文件,再执行make即可正常触发编译流程。
之前测试简单helloworld程序正常,说明编译器安装没有问题,该报错和Fortran源码、编译器本身无关,纯粹是makefile配置漏传参数+笔误+多余规则导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:15:28