如何从Meson启动外部Python程序?

时间:2019-02-18 14:10:47

标签: python build meson-build

在构建项目之前,我必须使用Meson构建系统通过Python脚本生成C ++源文件。

这是正确的方法吗,也就是将Python视为通用的外部命令?

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

或者,作为Meson本身就是Python程序,是否有可能以更直接的方式做同样的事情?

2 个答案:

答案 0 :(得分:1)

根据介子后面的key design considerations之一:

  

介子的设计方式是实现语言   不会在构建定义中公开。这样就可以(并且   也许甚至很容易)在任何其他编程中重新实现Meson   语言。

因此,即使介子是在Python中实现的,用户也可能会忘记这一点,而将精力集中在所提供的功能上,该功能可以通过 run_command 函数进行扩展。

答案 1 :(得分:1)

要使构建定义更可靠,可以首先尝试使用find_program()查找python可执行文件。如果找不到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 ++编译目标的依赖项,因此,可以确保先生成代码,然后再编译。