gcc 一起构建对象和依赖文件
gcc build object and dependency files together
在 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, (...)
..而-MG
需要-M
,所以你不能保留它。这应该不是问题,因为 -MG
仅在生成的头文件仍然丢失时才重要,在这种情况下,无论如何您都无法编译代码。
在 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, (...)
..而-MG
需要-M
,所以你不能保留它。这应该不是问题,因为 -MG
仅在生成的头文件仍然丢失时才重要,在这种情况下,无论如何您都无法编译代码。