问题描述
我有一个条件AM_CONDITIONAL
子句,该子句指出是否应构建一个可选组件(具有其自己的Makefile)。
因此,我在父Makefile.am
中添加了以下语句。
if CAN_DOCS
docs: ; $(MAKE) -C ./docs all
endif
如果我可以通过某种方式覆盖make all
目标,以便向docs
添加一个前提条件,并依次覆盖make install
来调用{ {1}}。
有办法吗?
解决方法
至少有两种可用的方法。
-
有条件地附加到
SUBDIRS
变量以钩住Automake's recursivemake
capabilities:SUBDIRS = if CAN_DOCS SUBDIRS += docs endif
子目录仅需要具有
Makefile
(在配置后),而根本不需要任何自动工具。但是,在这种情况下,顶级make
将尝试递归到 all 其递归目标的子目录中。如果子目录的makefile不支持所有这些副作用,则可能会产生有害的副作用。 Automake手册提供了a list。 -
使用
*-local
and / or*-hook
targets将自定义规则连接到标准目标。我认为,您应该能够将这些目标放入条件块中,但是,如果那行不通,那么您可以通过-local
和-hook
目标先决条件列表的内容来实现所需的条件。示例:if CAN_DOCS all-local: $(MAKE) -C ./docs all endif