如何在介子中运行构建后命令?



构建目标后如何在介子中运行命令? 例如。我有一个可执行文件:

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不会生成fakecustom_target()中指定的文件,连续的ninja命令将始终运行目标。

如果您不希望出现这种行为,有两种方法:

  1. 您可以编写一个脚本来chmodtarget.elf,然后将其复制到target,从而有效地创建目标文件。 如果这样做,请确保更改meson.build中的output文件。

  2. 如果您不介意键入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。

我刚刚注意到,靖司已经提供了这个答案。

相关内容

  • 没有找到相关文章

最新更新