Мезон custom_target никогда не выполняется, несмотря на то, что источники и зависимости устарели

У меня есть этот раздел в корневом каталоге моего проекта 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 по-прежнему не приводит к перестройке цели, похоже, здесь что-то еще происходит, но я не могу этого понять).


person bool3max    schedule 29.12.2019    source источник


Ответы (1)


По умолчанию пользовательские цели не создаются при запуске простого ninja, поэтому аргумент ключевого слова build_by_default необходимо передать и установить в true, например

custom_target('target', build_by_default: true)
person bool3max    schedule 29.12.2019