尽管源和依赖关系已过期,但 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.0
和 meson 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