添加条件目标以自动生成所有并安装目标

Posted

技术标签:

【中文标题】添加条件目标以自动生成所有并安装目标【英文标题】:Adding conditional targets to automake all and install targets 【发布时间】:2020-10-08 16:23:50 【问题描述】:

我有一个条件子句,AM_CONDITIONAL,说明是否应该构建一个可选组件(带有自己的 Makefile)。

因此,我在父 Makefile.am 中添加了以下语句。

if CAN_DOCS
docs: ; $(MAKE) -C ./docs all
endif

如果我可以以某种方式覆盖make all 目标以将先决条件添加到docs 并覆盖make install 依次以相同的方式调用$(MAKE) -C ./docs install,那就太好了(而且更便携) .

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

至少有两种可用的方法。

    有条件地附加到SUBDIRS 变量以挂钩Automake's recursive make 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
    

【讨论】:

以上是关于添加条件目标以自动生成所有并安装目标的主要内容,如果未能解决你的问题,请参考以下文章

将目标属性添加到 CMake 中现有的导入库

在 xcode 项目中自动构建和安装多个目标

CPack 尝试构建所有目标

使用CMake自动将文件夹中的所有文件添加到目标?

qt打开cmake工程keyvalue不显示

Python项目1:自动添加标签