在 Linux 下用 C++ 做跨平台开发,通常要解决三件事:编译构建、平台差异、依赖管理。下面按“从简单到工程化”的方式讲。
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
✅ 优点
| 平台 | 编译器 |
|---|---|
| Linux | g++ / clang++ |
| Windows | MSVC / MinGW / Clang |
| macOS | clang++ |
建议:
#if defined(_WIN32)
// Windows
#elif defined(__linux__)
// Linux
#elif defined(__APPLE__)
// macOS
#endif
✅ 推荐:
#include <filesystem>
#include <thread>
#include <chrono>
❌ 避免:
#include <windows.h>
#include <unistd.h>
// 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 install fmt
CMake 中:
find_package(fmt CONFIG REQUIRED)
target_link_libraries(demo fmt::fmt)
conan install . --build=missing
| 功能 | 库 |
|---|---|
| 网络 | Boost.Asio / libcurl |
| 图形 | SDL / Qt / GLFW |
| 日志 | spdlog |
| 文件系统 | std::filesystem |
| 线程 | std::thread |
用 GitHub Actions:
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
✅ Linux C++ 跨平台最佳实践
如果你愿意,可以告诉我:
我可以直接给你一套 可运行的 CMake 跨平台模板。