首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在目标内追加目标

在目标内追加目标
EN

Stack Overflow用户
提问于 2021-05-30 16:08:34
回答 3查看 60关注 0票数 0
代码语言:javascript
复制
install-component-a:
    cp ...
    db reload

install-component-b:
    cp ...
    db reload

install-component-b:
    cp ...
    db reload

我的Makefile不仅构建软件,而且还将软件安装到系统中。

该代码片段阐明了该软件有3个组成部分。有时我更新组件a,而其他时间我可能更新组件b和c。

这三个目标都需要刷新数据库。

如果我更新所有三个组件,并运行make install,我只需要刷新数据库一次,而不是三次。

有没有办法安排额外的目标在一个目标内运行?

我喜欢这样的东西:

代码语言:javascript
复制
install-component-a:
    cp ...
    a-make-command-to-add-new-target reload-database

install-component-b:
    cp ...
    a-make-command-to-add-new-target reload-database

install-component-b:
    cp ...
    a-make-command-to-add-new-target reload-database

reload-database:
    db reload

这样的a-make-command-to-add-new-target存在吗?

reload-database添加到all目标或install目标可能并不理想,因为如果组件a、b和c都没有更改,则不必重新加载数据库。

EN

回答 3

Stack Overflow用户

发布于 2021-05-30 16:41:08

Make recipes有自动变量$?,它扩展到比目标更新的先决条件。

代码语言:javascript
复制
install-component-a:
    cp ...

install-component-b:
    cp ...

install-component-c:
    cp ...

reload-database: install-component-a install-component-b install-component-c
    add new target $?
    db reload

您的示例表明目标不是文件。这可能是一个问题,因为所有先决条件都被认为比不存在的文件新。如果它们不考虑让组件接触文件并使用该文件时间戳来确定重建的必要性。

票数 1
EN

Stack Overflow用户

发布于 2021-05-30 23:20:34

不能在makefile中添加要构建的新目标。您似乎想要的是一种定义命令的方法,该命令将在所有其他规则运行后始终运行一次。没有这样的东西可用。

据我所知,要做到这一点,唯一的方法是递归调用make。它看起来像这样:

代码语言:javascript
复制
install-component-a install-component-b install-component-c: recurse ;

recurse:
        $(MAKE) $(MAKECMDGOALS:%=r-%)
        db reload

r-install-component-a:
    cp ...

r-install-component-b:
    cp ...

r-install-component-b:
    cp ...
票数 0
EN

Stack Overflow用户

发布于 2021-06-01 01:23:06

使用make的eval函数,例如查看Metaprogramming Make VI — The eval Function

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67759058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档