C++ gcc一起构建对象和依赖项文件
在Ubuntu上使用GCC4.7.2,我使用以下命令编译一些源文件:C++ gcc一起构建对象和依赖项文件,c++,gcc,g++,g++-4.7,C++,Gcc,G++,G++ 4.7,在Ubuntu上使用GCC4.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
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
,所以这不应该同时给我一个对象文件和一个依赖输出文件吗?如何确定问题所在?删除-M
和-MG
选项。从gcc手册页:
将-M传递给驱动程序意味着-E,(…)
..而-MG
需要-M
,因此您无法保留它。这不应该是一个问题,因为只有生成的头文件仍然丢失时,-MG
才重要,在这种情况下,您仍然无法编译代码