【问题标题】:How to launch an external Python program from Meson?如何从 Meson 启动外部 Python 程序?
【发布时间】:2019-02-18 14:10:46
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python build meson-build


    【解决方案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++编译目标的依赖,保证代码先生成后编译。

    【讨论】:

    【解决方案2】:

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

    介子的设计方式使得实现语言 从未在构建定义中公开。这使得它成为可能(并且 甚至很容易)在任何其他编程中重新实现介子 语言。

    因此,即使介子是在 Python 中实现的,用户可能会忘记这一点并专注于提供的功能,正如您所发现的,这些功能可以通过 run_command 函数进行扩展。

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多