尽管源和依赖关系已过期,但 Meson custom_target 永远不会执行

Posted

技术标签:

【中文标题】尽管源和依赖关系已过期,但 Meson custom_target 永远不会执行【英文标题】:Meson custom_target never executes despite sources and dependencies out of date 【发布时间】:2019-12-29 17:05:44 【问题描述】:

我在项目的根目录 meson.build 中有此部分:

if get_option('gen_py_bindings')

  message('told to build py bindings')

  custom_target('py_bindings', 
command: ['env', '_MESON_MODULE_NAME=' + meson.project_name(), ',_MESON_MODULE_VERSION=' + meson.project_version(), './py3_bindings/setup.py', 'build'], 
depends: [mainlib], 
depend_files: files(['py3_bindings/module.c', 'py3_bindings/setup.py']), 
input: ['py3_bindings/setup.py'], 
install: false, output: 'sharedextension.so')

endif

这是一个自定义目标,运行 setup.py 脚本来为我的项目库构建 python 绑定。


问题在于它总是看起来是最新的。我使用了 depends 关键字参数来指定它依赖于项目中的另一个构建目标,并使用 depend_files 关键字参数来指定它依赖于脚本用于构建扩展的 C 源文件,如以及作为command 运行的实际脚本。我也使用了 input 关键字参数,尽管我不明白它和 depend_files 之间的区别。


如果我对meson.build 进行更改(message() 调用显示成功),我只能重新生成自定义目标。

没有其他改变。我已经尝试更新自定义目标中列出的所有文件,但它总是导致:ninja: no work to do.。即使其他过时的目标被重建/重新链接/等等......

我在 linux 上使用 ninja 1.9.0meson 0.52.1


我也很清楚build_always_stale 关键字参数,但除非必要,否则我不想使用它。 (更新:将其设置为 true 仍然不会导致目标重建,看起来这里还有更多东西在起作用,但我无法弄清楚)。

【问题讨论】:

【参考方案1】:

默认情况下,在运行纯 ninja 时不会构建自定义目标,因此需要传递 build_by_default 关键字参数并将其设置为 true,例如

custom_target('target', build_by_default: true)

【讨论】:

以上是关于尽管源和依赖关系已过期,但 Meson custom_target 永远不会执行的主要内容,如果未能解决你的问题,请参考以下文章

尽管使用了刷新令牌,但 Google Ads API 仍显示“令牌已过期或撤销”

spa/meson.build:29:4:错误:找不到依赖项“bluez”,在 Ubuntu 16.04 中安装 PIPEWIRE 时尝试了 pkgconfig 和 cmake

当任务依赖关系过期时,luigi 可以重新运行任务吗?

meson+ninja build系统,使用meson & ninja 编译C工程

在现代CMake项目中存档静态依赖项

linux下使用yum源和更换国内Yum的方法