Gcc 在makefile中查找make目标

Gcc 在makefile中查找make目标,gcc,build,makefile,Gcc,Build,Makefile,我的makefile中当前有以下内容: ifneq ($(MAKECMDGOALS),clean) -include $(DEPS_debug) -include $(DEPS_unittest) -include $(DEPS_release) endif DEPS\uuu集合都相当大,因为它们是由gcc生成的,所以我只想在绝对必要时包含这些依赖项 现在的情况是,任何时候我使用这个makefile做除清理之外的任何事情,都会因为加载所有依赖项文件而导致两秒钟的等待。是的,它可能不必要地检查大

我的makefile中当前有以下内容:

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS_debug)
-include $(DEPS_unittest)
-include $(DEPS_release)
endif
DEPS\uuu
集合都相当大,因为它们是由
gcc
生成的,所以我只想在绝对必要时包含这些依赖项

现在的情况是,任何时候我使用这个makefile做除清理之外的任何事情,都会因为加载所有依赖项文件而导致两秒钟的等待。是的,它可能不必要地检查大量库头的更改,但如果它已经不能很好地工作,以至于我不想修改它,我会被诅咒的

我想
-当我的make目标是
debug
时,只包括
$(DEPS_debug)
,等等


有比
MAKECMDGOALS
更好的变量吗?我所看到的一个问题是,如果我使用
MAKECMDGOALS
断言包含依赖项,如果我稍后向makefile
foo:debug release
添加一个条目并运行
makefoo
,它将不会加载任何依赖项

如何生成依赖项

gcc -M ... source.c
vs


前者列出了
/usr/include
中的标题;后者没有。

这是我一直使用的行的格式:
$(CC)$(CFLAGS_unittest)$(INCLUDE)-MM-MT$@-MF$(patsubst%.o,%.d,$@)$
该行的相关部分是
-MM
-MT
-MF
更改依赖项输出中包含的目标文件(而不是
file.o
)以及输出的位置。因此,您已经在修剪列表以排除系统标题;这只意味着您有大量的编译依赖项。您可能应该研究减少依赖头数量的常用技术—转发声明,等等。还应该查看GCC的输出,以确保单个文件不会重复太多。我使用的其中一个标题包括一个不同名称的文件(
。/belib/。/belib/。/incl/machine.h
。/incl/。/incl/machine.h
。/incl/machine.h
),因为代码易于使用
。/include>。/include/machine.h“
在使用机器配置标题的任何大量标题中。这是因为在头所在的目录中(一个只包含头的普通C文件)使用了
gcc-MM
gcc -MM ... source.c