Meson:根据目标改变C编译器

Meson: Change the C compiler based on the target

我正在构建一个支持 32 位和 64 位的操作系统,使用 Meson 构建系统。我刚刚开始添加对 64 位的支持,但遇到了一个问题。当我使用 64 位 C 编译器时,kernelstage2 都使用该编译器进行编译。问题是,stage2 文件夹必须使用 32 位 C 编译器而不是 64 位编译器进行编译。有什么办法可以在介子中实现这一目标吗?我应该切换到 CMake 吗?

Which is the problem, the stage2 folder, has to be compiled with the 32 bit C compiler, not the 64 bit compiler.

构建系统都不会让您在单个构建中执行此操作...CMake 和 Meson 都有一个根深蒂固的假设,即每种语言有 一个 编译器1。如果需要使用多个编译器,则需要将构建拆分为多个独立的项目。如何编排构建它们取决于您……对于 CMake,我建议使用带有 ExternalProject 的超级构建。对于介子,我不确定标准方法是什么。

1. 技术上 Meson 也允许你定义一个host/native 编译器(用于编译build-time 工具),但它不适合这种情况,因为主机可能不是任一目标,您最终可能会想要使用三个或更多编译器(例如用于 ARM)。

Should I switch to CMake?

可能不会,因为您已经在使用 Meson 了。但是,如果您的构建规则变得足够复杂,您可能会发现 CMake 编写函数和抽象的能力利大于弊。