Trimsky Asked:2022-07-09 10:40:45 +0800 CST2022-07-09 10:40:45 +0800 CST 2022-07-09 10:40:45 +0800 CST g++ 的 -MD -MMF 选项是什么? 772 大家好!请解释这些是 gcc、g++ 中的 -MD -MMF 选项。我经常在 premake5 中看到它们,CMake 生成的 Makefiles。但实际上没有关于它们的信息。我在 gcc.gnu.org 上找到了他们的解释,但我不明白这是什么意思。请帮帮我。 gcc 2 个回答 Voted Best Answer Fat-Zer 2022-07-09T12:27:40+08:002022-07-09T12:27:40+08:00 需要这些参数来强制为每个对象gcc生成特殊的依赖文件 ( *.d),然后可以将其包含在Makefile. 手动编写Makefile's 时,如果您尝试在表单中指定依赖项: foo.o: foo.c gcc -c foo.c -o foo.o 那么有一个问题,例如,foo.o如果您更改其中包含的标题之一,它将不会被重建。您可以手动指定这些依赖项:foo.cfoo.h foo.o: foo.c foo.h bar.h gcc -c foo.c -o foo.o 但这很无聊。 实际上,解决这个问题的方法之一是依赖文件。我们运行编译器来生成*.d-file,然后从中加载规则,以免显式写入所有头文件: foo.o: foo.c foo.d gcc -c foo.c -o foo.o foo.d: foo.c gcc -M -MF foo.d foo.c include foo.d 依赖文件本身实际上是Makefile'th 并且看起来像这样: foo.o: foo.h bar.h 否则,从-M-flags 中每个特定标志的确切作用应该从它们的描述中显而易见。在这篇文章中可以找到如何将所有这些应用到 GNU Make/gcc 隔间中更实用。其他构建系统如何使用它取决于它们的内部结构。 PS:-MMF我不知道它是什么,但我怀疑-M -MF两者都是暗示-MMD的。 HolyBlackCat 2022-07-10T04:51:01+08:002022-07-10T04:51:01+08:00 在相邻的答案中,他们解释了为什么需要这些标志,并展示了如何使用它们的示例。 但是有一个更简单的方法。不用两条规则,写一条就足够了: foo.o: foo.c gcc foo.c -c -o foo.o -MMD -MP # Остальные флаги компилятора сюда же. -include foo.d 这将编译和生成.d文件合并在一个步骤中,因此它应该更快一些。并且少写。
需要这些参数来强制为每个对象
gcc
生成特殊的依赖文件 (*.d
),然后可以将其包含在Makefile
.手动编写
Makefile
's 时,如果您尝试在表单中指定依赖项:那么有一个问题,例如,
foo.o
如果您更改其中包含的标题之一,它将不会被重建。您可以手动指定这些依赖项:foo.c
foo.h
但这很无聊。
实际上,解决这个问题的方法之一是依赖文件。我们运行编译器来生成
*.d
-file,然后从中加载规则,以免显式写入所有头文件:依赖文件本身实际上是
Makefile
'th 并且看起来像这样:否则,从
-M
-flags 中每个特定标志的确切作用应该从它们的描述中显而易见。在这篇文章中可以找到如何将所有这些应用到 GNU Make/gcc 隔间中更实用。其他构建系统如何使用它取决于它们的内部结构。PS:
-MMF
我不知道它是什么,但我怀疑-M -MF
两者都是暗示-MMD
的。在相邻的答案中,他们解释了为什么需要这些标志,并展示了如何使用它们的示例。
但是有一个更简单的方法。不用两条规则,写一条就足够了:
这将编译和生成
.d
文件合并在一个步骤中,因此它应该更快一些。并且少写。