0

在 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
    如果 -MD 与 -E 一起使用,则任何 -o 开关都被理解为指定
    依赖输出文件(请参阅 -MF),但如果不使用 -E,则每个 -o 都被理解为
    指定一个目标对象文件。

    由于没有隐含 -E,因此 -MD 可用于生成依赖项输出文件作为
    编译过程的副作用。

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

4

1 回答 1

2

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

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

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

于 2015-01-20T20:17:26.807 回答