Build 如何调试GNU Make target/prereq中与正则表达式匹配的内容?

Build 如何调试GNU Make target/prereq中与正则表达式匹配的内容?,build,makefile,cygwin,Build,Makefile,Cygwin,我在一个巨大的遗留C项目中工作,它有一个基于GNU Make的构建系统。其中一条规则用于依赖项的依赖项生成。看起来是这样的: %.d:%.c recipe 然而,在Cygwin中,这是在抱怨我没有任何规则来定义它匹配的第一个foo.d文件,并且它在Linux下工作得很好,所以我想知道%.d扩展到什么 如何调试它?请参阅GNU make手册中的“模式规则”。%匹配任意数量的字符。因此,如果make想要构建一个文件foo.d,那么%匹配foo,为了应用这个规则,这意味着make必须能够找到(

我在一个巨大的遗留C项目中工作,它有一个基于GNU Make的构建系统。其中一条规则用于依赖项的依赖项生成。看起来是这样的:

%.d:%.c
   recipe
然而,在Cygwin中,这是在抱怨我没有任何规则来定义它匹配的第一个foo.d文件,并且它在Linux下工作得很好,所以我想知道%.d扩展到什么


如何调试它?

请参阅GNU make手册中的“模式规则”。
%
匹配任意数量的字符。因此,如果make想要构建一个文件
foo.d
,那么
%
匹配
foo
,为了应用这个规则,这意味着make必须能够找到(或构建)一个名为
foo.c

的文件,我得到以下错误:“make[2]:***没有规则来设置目标'foo.d'。Stop.”并且foo.c存在,可以由make构建。什么会导致这种不正确的行为?您可以尝试的第一件事是添加一些空格,如
%.d:%.c
。在Windows上,有时会混淆目标定义和路径名中的驱动器号,因此最好在冒号字符周围使用空格。如果这没有帮助,您应该运行
make-d
,并尝试找出make拒绝该规则的原因。输出量很大,但应该很有启发性。