其中,makefile中给出了目标all recursive
在一个makefile中,我得到了目标all及其依赖项all recursive。 我搜索了整个文件,但我不能得到所有递归定义。我认为所有递归必须也是一个目标,或者下一步该怎么做?所以有人可以告诉我如何处理这个问题,我将非常感谢你的帮助其中,makefile中给出了目标all recursive,makefile,Makefile,在一个makefile中,我得到了目标all及其依赖项all recursive。 我搜索了整个文件,但我不能得到所有递归定义。我认为所有递归必须也是一个目标,或者下一步该怎么做?所以有人可以告诉我如何处理这个问题,我将非常感谢你的帮助 all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive 我无法得到“所有递归”的定义。 如果我删除这个,make程序将继续处理所有目标。这是“全部递归”内置的吗 查看它是否包含在目标$(递
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-recursive
我无法得到“所有递归”的定义。
如果我删除这个,make程序将继续处理所有目标。这是“全部递归”内置的吗 查看它是否包含在目标$(递归目标)中定义我也花了数小时寻找它们。不,它不是
make
的内置功能;事实证明,这是自动工具生成的Makefile的一个特征
那些递归对象实际上是在这个Makefile中定义的,但是使用复杂的方式,您无法使用simplegrep
找到它们
它从Makefile中的RECURSIVE\u TARGETS
变量定义开始,如下所示:
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
下面是这些目标的真实定义:
$(RECURSIVE_TARGETS):
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
其中包括:
all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive:
@fail= failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
这个目标的配方本质上是一个样板代码,用于循环遍历当前文件夹中的每个子目录,并在其中启动make
,使用相同的目标名称,但去掉了“-recursive”
请注意,这些递归对象
目标并不意味着由用户直接调用;它将自动运行,作为正常THING
target(无“-recursive”)的一部分,作为触发子项目树中相同目标构建的机制
附录:示例代码取自(版本)的配置根Makefile。它就在那里。你就是找不到。它可能位于一个变量中,然后用作目标。没有内置的显式目标(除了特殊的伪目标,如
.DEFAULT
等),因此它肯定在您的makefile中。如果愿意,您可以使用make-p
打印make的内部数据库。它也可能位于包含的d中,因此它可能不直接位于makefile
中。。。另外,如果$(AM_MAKEFLAGS)
包含类似-C
的内容,则它将位于生成文件中,或者如果它包含-f
,则您需要查看那里。如果$(MAKE)
包含了MAKE
的可能选项,而不仅仅是/MAKE
,那么同样的事情也适用。lol我发现了同样的问题,因为同样的Makefile配方。我知道这是因为自动生成的,但仍然:]我认为这应该是公认的答案。感谢您深入了解autotools!