默认构建选项

Meson 提供了许多内置选项来控制项目的构建和安装方式。在绝大多数情况下,这些选项都有很好的默认值。但是,有一些选项meson-python会用自己的默认值覆盖,以调整构建过程以适应构建 Python 轮子的任务。

meson-python指定的默认选项被pyproject.toml中指定的包特定选项以及用户在构建时通过 Python 构建前端提供的选项覆盖。有关详细信息,请参阅将参数传递给 Meson指南。

用于构建项目的选项在meson setup构建阶段输出的“用户定义选项”部分中进行了汇总,例如,在运行python -m build -w时。这将类似于

User defined options
  Native files: $builddir/meson-python-native-file.ini
  buildtype   : release
  b_ndebug    : if-release
  b_vscrt     : md

其中构建目录的路径已替换为$builddir以提高清晰度。

meson-python默认指定的选项是

native-file=$builddir/meson-python-native-file.ini

meson-python使用本地文件将 Meson 指向构建必须针对的python解释器。这是用于运行 Python 构建前端的 Python 解释器。否则,Meson 将在$PATH上查找第一个 Python 解释器,这可能与之不同。

如果需要对本机环境进行进一步调整,可以将其他--native-file选项传递给meson setup。Meson 将合并所有机器文件的内容。为了确保一切按预期工作,meson-python本地文件在命令行中排在最后,覆盖了用户提供的本地文件中可能指定的python二进制文件路径。

buildtype=release

Meson 的默认行为是生成一个调试构建,其中二进制文件使用调试符号编译,并且在使用 MSVC 编译时,链接到 Visual Studio 调试运行时,见下文。meson-python的主要目的是构建发布工件,因此选择了更合适的构建类型。发布构建在没有调试符号的情况下编译,并且使用编译器优化。有关更多详细信息,请参阅Meson 文档

b_ndebug=if-release

出于与向后兼容性相关的理由,Meson 不会为发布构建禁用断言。对于大多数用户来说,这是一个令人惊讶且不希望有的行为。此选项指示 Meson 将-DNDEBUG选项传递给编译器,除非构建类型设置为除发布之外的其他类型。

b_vscrt=md

使用默认选项,在编译调试构建时,Meson 指示 MSVC 编译器使用 Visual Studio 运行时库的调试版本。这会导致 MSVC 链接器查找所有链接的 DLL 的调试版本。用于 Windows 的 Python 发行版不包含 Python DLL 的调试版本,并且链接失败。这些链接错误令人惊讶且难以诊断。为了避免在用户明确要求调试构建时出现此问题,meson-python将此选项设置为指示 Meson 使用 Visual Studio 运行时的发布版本进行编译。有关更多详细信息,请参阅Meson 文档Visual Studio 文档。此选项在使用其他编译器时会被忽略。