gcc同时产生依赖和对象

时间:2015-06-18 14:46:06

标签: gcc makefile g++

我正在使用gcc 4.8.2,我正在尝试同时构建目标文件和依赖文件。

这有效:

$ g++ -std=c++11 -MP -MD -c foo.cxx -o foo.o
$ [ -s foo.d ] && [ -s foo.o ] && echo yay
yay

但是,我想生成foo.d而不是生成foo.D,所以我尝试了:

$ rm foo.d foo.o
$ g++ -std=c++11 -MP -M -MF foo.D -c foo.cxx -o foo.o
$ [ -s foo.D ] && [ -s foo.o ] && echo yay
$

成功生成foo.D,但空foo.o。为什么? -MD的{​​{3}}以:

开头
  

-MD相当于-M -MF 文件,但不暗示-E。

1 个答案:

答案 0 :(得分:1)

我不知道为什么-M -MF foo.D不适合你,我的文档阅读与你的相同。我认为应该有效。编译的strace可能会告诉您一些有趣的事情。

但作为一种解决方案,您只需将-MF foo.D参数添加到原始命令行即可,并且可以执行您想要的操作。

正如-MF的文档所说:

  

-MF文件   与-M或-MM一起使用时,指定要将依赖项写入的文件。如果没有给出-MF开关,则预处理器将规则发送到它将发送预处理输出的相同位置

     

当与驱动程序选项-MD或-MMD一起使用时,-MF会覆盖默认依赖项输出文件。