C/C++的交叉编译,需要的无非是工具链(编译器、链接器、头文件和库)。
Clang 内置交叉编译,意思是 Clang 自己的源码支持平台 A-Z ,所以只要 Clang 本身被构建的时候勾上了对某平台(比如 aarch64 )支持就没问题,但通常为了缩小体积,各种包管理里的 Clang 只会带 Host 架构支持,比如你是 x86 的机器,上面的 Clang 可能就只能编译到 x86 。所以用 Clang 的话需要搞一个支持你想要的目标平台的版本。GCC 定得更死一点,一个 GCC 只能支持一类目标平台,所以你得装一个特定的交叉编译 GCC (一般可执行文件名会带前缀),比如 gcc-mingw-w64 。
头文件和库,Linux 和 BSD 这类开源系统一般很容易搞到全套,Windows 注意下分 mingw 和 msvc 两套,macOS 也能下到。链接器麻烦一些,从 Linux 交叉编译基本只能用 GNU ld 或者 lld ,Windows 和 macOS 的 link.exe 和 ld64 没有其他平台的版本。总之你可以去参考 zig cc 包里的依赖,甚至直接用它就可以,从它交叉编译出 macOS 和 Windows 的 hello world 就是一分钟的事。
CMake 的配置可以参考下官方文档,核心也基本就是一些编译选项:
https://cmake.org/cmake/help/book/mastering-cmake/chapter/Cross%20Compiling%20With%20CMake.html