Как запустить внешнюю программу Python из Meson? - PullRequest
0 голосов
/ 18 февраля 2019

Прежде чем строить свой проект, я должен сгенерировать исходный файл C ++ с помощью скрипта Python, используя систему сборки Meson.

Это правильный путь, т.е. рассматривать Python как универсальную внешнюю команду?

# meson.build
r = run_command('python', 'arg1', 'arg2', 'arg3')
if r.returncode() != 0
  error('Error message')
endif

Или, будучи Meson-программой Python, возможно ли сделать то же самое более простым способом?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Чтобы сделать определение вашей сборки более надежным, вы можете сначала попытаться найти исполняемый файл python с помощью find_program () .Это остановит сборку с подробным указанием, если python не может быть найден (Вы можете изменить это поведение, передав required: false в качестве аргумента).

Затем, чтобы убедиться в отсутствии проблем с путями, если ваши аргументы являются файлами или каталогами, убедитесь, что обернули их с помощью files () .

Всего:

python_exe = find_program('python3', 'python')
params = files('file1', 'dir/file2')

r = run_command(python_exe, params, 'arg1', 'arg2')
if r.returncode() != 0
    error('Error message')
endif

Вы также можете рассмотреть возможность генерации кода с помощью python с фактическими целями здания, например, generator () или custom_target () .Таким образом, вы можете использовать цель генерации кода в качестве зависимости для фактической цели компиляции c ++, поэтому гарантируется, что код будет сгенерирован первым, а только потом скомпилирован.

0 голосов
/ 19 февраля 2019

В соответствии с одним из ключевых конструктивных соображений , стоящих за мезоном:

Мезон был спроектирован таким образом, что язык реализации никогда не раскрывается в определениях сборки.Это позволяет (и, возможно, даже легко) переопределить Meson на любом другом языке программирования.

Так что, даже несмотря на то, что мезон реализован на Python, пользователи могут забыть об этом и сосредоточиться на предоставляемой функциональности, котораяв том виде, в каком вы его нашли, расширяется с помощью функции run_command .

...