Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gcc一起构建对象和依赖项文件_C++_Gcc_G++_G++ 4.7 - Fatal编程技术网

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

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

在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
时,我得到一个空的
obj/foo.o
。编译也没有任何输出。从总体上看,这似乎是可行的:

-MD
如果-MD与-E一起使用,则任何-o开关都被理解为指定了
依赖项输出文件(参见-MF),但如果不使用-E,则每个-o都被理解为
指定目标对象文件

由于-E不是隐含的,-MD可用于生成依赖项输出文件,如
编译过程的副作用


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

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

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

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