gcc一起构建对象和依赖文件

时间:2015-01-20 20:03:27

标签: c++ gcc g++ g++-4.7

在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。根本没有编译输出。看documentation,看起来这应该有效:

  

-MD
  如果-MD与-E一起使用,则任何-o开关都应理解为指定
  依赖项输出文件(参见-MF),但如果在没有-E的情况下使用,则每个-o应理解为
  指定目标对象文件。

     

由于未暗示-E,因此-MD可用于生成依赖性输出文件   编译过程的副作用。

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

1 个答案:

答案 0 :(得分:2)

删除-M-MG选项。来自gcc联机帮助页:

  

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

..而-MG需要-M,因此您无法保留它。这不应该是一个问题,因为-MG只有在生成的头文件仍然缺失的情况下才有用,在这种情况下,无论如何你都无法编译代码。