温馨提示×

linux c++配置怎样跨平台

小樊
45
2026-09-08 03:04:18
栏目: 编程语言

Linux 下用 C++ 做跨平台开发,通常要解决三件事:编译构建、平台差异、依赖管理。下面按“从简单到工程化”的方式讲。


一、构建系统(最关键)

✅ 推荐:CMake(事实标准)

CMake 是 Linux / Windows / macOS 都支持的最佳选择。

示例:

cmake_minimum_required(VERSION 3.16)
project(demo)

add_executable(demo main.cpp)

if(WIN32)
    target_compile_definitions(demo PRIVATE PLATFORM_WINDOWS)
elseif(APPLE)
    target_compile_definitions(demo PRIVATE PLATFORM_MAC)
else()
    target_compile_definitions(demo PRIVATE PLATFORM_LINUX)
endif()

构建:

mkdir build && cd build
cmake ..
make

✅ 优点

  • 跨平台
  • 支持 GCC / Clang / MSVC
  • 大量第三方库支持

二、编译器选择

平台 编译器
Linux g++ / clang++
Windows MSVC / MinGW / Clang
macOS clang++

建议:

  • 使用 C++17 或 C++20
  • 避免厂商私有扩展
#if defined(_WIN32)
    // Windows
#elif defined(__linux__)
    // Linux
#elif defined(__APPLE__)
    // macOS
#endif

三、避免平台相关代码

1️⃣ 使用标准库

✅ 推荐:

#include <filesystem>
#include <thread>
#include <chrono>

❌ 避免:

#include <windows.h>
#include <unistd.h>

2️⃣ 抽象平台差异

// platform.h
void sleep_ms(int ms);

// linux_impl.cpp
#include <unistd.h>
void sleep_ms(int ms) { usleep(ms * 1000); }

// win_impl.cpp
#include <windows.h>
void sleep_ms(int ms) { Sleep(ms); }

四、依赖管理(跨平台难点)

✅ vcpkg(Windows/Linux/macOS)

vcpkg install fmt

CMake 中:

find_package(fmt CONFIG REQUIRED)
target_link_libraries(demo fmt::fmt)

✅ Conan(更偏 C++ 原生)

conan install . --build=missing

五、常见跨平台库

功能
网络 Boost.Asio / libcurl
图形 SDL / Qt / GLFW
日志 spdlog
文件系统 std::filesystem
线程 std::thread

六、CI 验证(非常重要)

用 GitHub Actions:

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]

七、推荐组合(实用方案)

Linux C++ 跨平台最佳实践

  • 编辑器:VSCode / CLion
  • 构建:CMake
  • 依赖:vcpkg 或 Conan
  • 标准:C++17/20
  • CI:GitHub Actions

如果你愿意,可以告诉我:

  • 目标平台(Windows? macOS? 嵌入式?)
  • 是否用 GUI
  • 是否已有代码

我可以直接给你一套 可运行的 CMake 跨平台模板

0