Как запустить команды пост сборки в мезон? - PullRequest
0 голосов
/ 07 января 2020

Как я могу в мезоне выполнить команду после построения цели? Например. У меня есть исполняемый файл:

executable('target.elf', 'source1.c', 'source2.c')

И после сборки target.elf я хочу выполнить команду (например, chmod -x target.elf).

Я пытался custom_target(), но это требует вывода. У меня нет нового выхода, у меня просто есть target.elf. Я пытался run_command(), но я не знал, как выполнить его после здания.

1 Ответ

0 голосов
/ 08 января 2020

Следующий код должен подойти.

project('tutorial', 'c')
exec = executable('target.elf', 'main.c', build_by_default : false)
custom_target('final binary',
          depends : exec,
          input : exec,
          output : 'fake',
          command : ['chmod', '+x', '@INPUT@'],
          build_by_default : true)

Обратите внимание, что, поскольку я хочу всегда запускать цель fake, я использую custom_target(). Однако команда chmod + x demo не создает файл fake, указанный в custom_target(), последующая команда ninja будет всегда запускать цель.

Если вы этого не сделаете Если вам нужно такое поведение, есть два способа:

  1. Вы можете написать скрипт, который chmod target.elf затем копирует его в target, тем самым эффективно создавая целевой файл. Обязательно измените файл output в meson.build, если вы это сделаете.

  2. Если вы не против набрать ninja chmod вместо ninja, вы можете использовать run_target().

# optional
run_target('chmod',
       command : ['chmod', '+x', exec])

Другой альтернативой является использование install_mode для executable().

Также обратите внимание, что вы должны всегда использовать find_program() вместо простого chmod. Этот пример не использует его для простоты.

...