GCC 一起构建对象和依赖项文件

gcc build object and dependency files together

本文关键字:依赖 文件 对象 一起 构建 GCC      更新时间:2023-10-16

在 Ubuntu 上使用 gcc 4.7.2,我正在使用以下命令编译一些源文件:

g++ -c -o obj/foo.o foo.cpp -O0 -Wall [.. lots of other args .. ]

这工作正常,给了我一个合理的目标文件,obj/foo.o.但是,如果我还想同时生成依赖项文件:

g++ -c -o obj/foo.o foo.cpp -O -Wall [ .. ] -M -MD -MG -MP -MF obj/foo.dep

然后,当我得到一个看起来完全合理的obj/foo.dep时,我得到了一个空obj/foo.o。编译也根本没有输出。查看文档,似乎这应该有效:

-医学博士
    如果 -MD 与 -E 结合使用,则任何 -o 开关都被视为指定
    依赖输出文件(参见 -MF),但如果在没有 -E 的情况下使用,则每个 -o 被理解为
    指定目标对象文件。

    由于 -E 不是隐含的,因此 -MD 可用于生成依赖输出文件,如下所示
    编译过程的副作用。

我没有使用-E,所以这不应该同时给我一个目标文件和一个依赖输出文件吗?如何确定问题出在哪里?

删除-M-MG选项。来自 gcc 手册页:

将 -M 传递给驱动程序意味着 -E,(...

..-MG需要-M,所以你不能保留它。这应该不是问题,因为只有当生成的头文件仍然丢失时-MG才重要,在这种情况下,您无论如何都无法编译代码。