作为较大 makefile 的一部分,我使用 config.txt 和 perl 脚本从 .hh 文件创建 .h 文件。 .hh 文件位于 /source 目录中,生成的 .h 文件位于 /hdr 目录中。在这种情况下,semaphore.hh 位于源目录中,并且 hdr 目录存在且不包含 semaphore.h 文件。以下 makefile...
/hdr/semaphore.h : /source/semaphore.hh config.txt
#...
%.h: %.hh config.txt
<tab> perl copymod.pl $< >$@
...产生,“没有规则可以创建目标
/source/semaphore.hh', needed by
/hdr/semaphore.h'。”
我该如何解决这个问题?
模式规则:
%.h: %.hh config.txt
是一个模板,它告诉make,“如果你想构建一个与模式
%.h
匹配的目标,并且如果你可以找到或找到一种方法来构建先决条件%.hh
和config.txt
,那么您可以使用此配方来构建目标”。
在您的情况下,文件
/hdr/semaphore.h
与模式 %.h
与 %
的主干(与 /hdr/semaphore
匹配的部分)相匹配。因此,请根据先决条件 %.hh
中的模式进行替换,并得出 /hdr/semaphore.hh
。所以 make 会尝试构建它,但它不能,所以你会得到你看到的错误。
如果您希望
.h
和 .hh
文件位于不同的目录中,则模式必须反映这一点。例如你可以写:
/hdr/%.h: /src/%.hh config.txt
现在
/hdr/semaphore.h
的词干是 semaphore
,当你将其代入 /src/%.hh
时,你会得到 /src/semaphore.hh
。