在构建项目之前,我必须使用Meson构建系统通过Python脚本生成C ++源文件。
这是正确的方法吗,也就是将Python视为通用的外部命令?
# meson.build
r = run_command('python', 'arg1', 'arg2', 'arg3')
if r.returncode() != 0
error('Error message')
endif
或者,作为Meson本身就是Python程序,是否有可能以更直接的方式做同样的事情?
答案 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 ++编译目标的依赖项,因此,可以确保先生成代码,然后再编译。