使用子目录制作给出“没有规则来制作目标...”

问题描述 投票:0回答:1

作为较大 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'。” 我该如何解决这个问题?

gnu-make
1个回答
0
投票

模式规则:

%.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

© www.soinside.com 2019 - 2024. All rights reserved.