在 Linux 上做 C++ 跨平台编译,核心目标是:
一份源码,能在不同操作系统 / 架构上编译运行(如 Linux / Windows / macOS,x86 / ARM 等)。
下面从 思路 → 工具 → 实践方案 给你一个完整指南。
.exe✅ 实际项目中 两者通常结合使用
❌ 不推荐:
#include <windows.h>
#include <unistd.h> // 裸用
✅ 推荐:
#ifdef _WIN32
// Windows
#elif __linux__
// Linux
#elif __APPLE__
// macOS
#endif
| 功能 | 推荐 |
|---|---|
| 文件系统 | std::filesystem / boost::filesystem |
| 网络 | asio / boost.asio |
| 线程 | std::thread |
| GUI | Qt / SDL / wxWidgets |
| 日志 | spdlog |
cmake_minimum_required(VERSION 3.16)
project(MyApp)
set(CMAKE_CXX_STANDARD 17)
add_executable(myapp main.cpp)
✅ 优点:
sudo apt install mingw-w64
x86_64-w64-mingw32-g++ main.cpp -o app.exe
cmake -DCMAKE_TOOLCHAIN_FILE=toolchain-mingw.cmake
toolchain 示例:
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
sudo apt install gcc-arm-linux-gnueabihf
arm-linux-gnueabihf-g++ main.cpp -o app_arm
使用 NDK
$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
docker run --rm -v $(pwd):/src ubuntu:22.04 bash /src/build.sh
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v3
- run: cmake -B build && cmake --build build
✅ 一次提交,三个平台自动编译
| 问题 | 原因 |
|---|---|
| 编译通过,运行崩溃 | 动态库不匹配 |
| Windows 中文乱码 | 编码 / wchar_t |
| 路径问题 | / vs \ |
| 宏判断混乱 | 手写太多 #ifdef |
✅ 现代 C++ 跨平台方案
C++17/20
+ CMake
+ 标准库 / 少量第三方库
+ Docker
+ GitHub Actions
你可以告诉我:
我可以直接给你 可用的 CMake + 工具链文件 + 编译命令。