У меня есть этот раздел в корневом каталоге моего проекта 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.
. Даже если другие устаревшие цели будут перестроены / переподключены и т. Д.
Я использую ninja 1.9.0
и meson 0.52.1
в Linux.
Мне также хорошо известен аргумент ключевого слова build_always_stale
, но я не хочу использовать его без необходимости. (обновление: установка значения true
по-прежнему не приводит к перестройке цели, похоже, здесь что-то еще происходит, но я не могу этого понять).