构建目标后如何在介子中运行命令? 例如。我有一个可执行文件:
executable('target.elf', 'source1.c', 'source2.c')
构建target.elf
后,我想执行一个命令(例如。chmod -x target.elf
(上。
我尝试了custom_target()
,但这需要输出。我没有新的输出,我只有target.elf
.我尝试了run_command()
但我不知道如何在建筑物后执行它。
以下代码应该可以。
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
,从而有效地创建目标文件。 如果这样做,请确保更改meson.build
中的output
文件。如果您不介意键入
ninja chmod
而不是ninja
,您可以使用run_target()
.
# optional
run_target('chmod',
command : ['chmod', '+x', exec])
另一种选择是使用install_mode
进行executable()
.
另请注意,您应该始终使用find_program()
而不是普通chmod
。 为了简单起见,此示例不使用它。
可执行文件现在有一个参数install_mode
(添加了 0.47.0(,以符号格式指定文件模式,并可选择指定已安装文件的所有者/UID 和组/GID。
我刚刚注意到,靖司已经提供了这个答案。