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

如何正确组合gcc的-o与-MM编译参数?

解决gcc生成依赖时目标文件被截断的问题

我来帮你分析下这个问题,大概率是这几个原因导致的,对应解决办法如下:

  • 先检查deps目录是否存在
    你用-MF deps/main.d指定了依赖文件的路径,但如果deps文件夹还没创建,gcc无法写入依赖文件,会导致编译过程异常,目标文件只生成了一部分就被截断。解决方法很简单,先创建目录:

    mkdir -p deps
    

    再重新执行编译命令即可。

  • 明确指定依赖文件中的目标项(添加-MT选项)
    有些gcc版本中,当同时使用-MM和-c时,如果不明确指定依赖文件里的目标名称,gcc可能会出现逻辑混淆,影响目标文件的生成。可以在命令中加入-MT选项,明确告诉gcc依赖对应的目标文件:

    cc -MM -MP -MT obj/main.o -MF deps/main.d -Wall -c -o obj/main.o src/main.c
    cc -MM -MP -MT obj/foo.o -MF deps/foo.d -Wall -c -o obj/foo.o src/foo.c
    

    这样能让gcc清晰区分依赖生成和目标文件编译的逻辑。

  • 分开执行编译和依赖生成(备选方案)
    如果上面的方法都不行,你可以把编译目标文件和生成依赖文件的操作分开,避免两者互相干扰:

    # 先编译生成目标文件
    cc -Wall -c -o obj/main.o src/main.c
    cc -Wall -c -o obj/foo.o src/foo.c
    # 再单独生成依赖文件
    cc -MM -MP -MF deps/main.d src/main.c
    cc -MM -MP -MF deps/foo.d src/foo.c
    

    虽然会多一次编译操作,但能彻底避免冲突问题。

  • 检查gcc版本
    极少数情况下,旧版本的gcc可能存在-MM与-c同时使用的bug,导致目标文件生成异常。可以通过gcc --version查看版本,必要时升级到较新的稳定版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:37:52