Следующий код должен подойти.
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
будет всегда запускать цель.
Если вы этого не сделаете Если вам нужно такое поведение, есть два способа:
Вы можете написать скрипт, который chmod
target.elf
затем копирует его в target
, тем самым эффективно создавая целевой файл. Обязательно измените файл output
в meson.build
, если вы это сделаете.
Если вы не против набрать ninja chmod
вместо ninja
, вы можете использовать run_target()
.
# optional
run_target('chmod',
command : ['chmod', '+x', exec])
Другой альтернативой является использование install_mode
для executable()
.
Также обратите внимание, что вы должны всегда использовать find_program()
вместо простого chmod
. Этот пример не использует его для простоты.