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

标签 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
    If -MD is used in conjunction with -E, any -o switch is understood to specify the
    dependency output file (see -MF), but if used without -E, each -o is understood to
    specify a target object file.

    Since -E is not implied, -MD can be used to generate a dependency output file as
    a side-effect of the compilation process.

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

最佳答案

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

Passing -M to the driver implies -E, (...)

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

关于c++ - gcc 一起构建对象和依赖文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054189/

相关文章:

c++ - 如何调试 g++ 的段错误?

c++ - 在 C++ 中,对象和指向对象的指针有什么区别?

c++ - 如何将静音音频数据写入音频流?

c++ - 初始化模板对象

c++ - GCC 4.6.1 的链接问题

c - 在 C 中只将一个参数传递给 main()

c++ - 循环遍历 MFC 子对话框、MDIFrame 等

c - main.o 的 '.text' 节中引用的全局变量在废弃的 '.bss' 节中定义

c++ - 为什么不使用类关键字就不能创建对象?

c++ - 库适用于 Clang 但不适用于 GCC