使用标准C++和可移植库,通过CMake构建,封装系统差异,确保跨平台一致性。

要在 Windows 和 Linux 下进行 C++ 跨平台开发,关键在于规避系统差异、使用可移植代码和合适的工具链。核心思路是避免依赖特定操作系统的 API、文件路径、编译器扩展或二进制格式,同时借助现代构建系统和标准库来统一开发流程。
统一使用标准 C++ 和可移植库
跨平台开发的首要原则是尽量使用 ISO C++ 标准定义的语言特性和库,避免平台专属功能。
- 优先使用 STL(标准模板库),如 std::string、std::vector、std::filesystem(C++17 起)等,替代平台相关的字符串或文件操作。
- 用 std::thread、std::mutex 等代替 Windows 的 CreateThread 或 Linux 的 pthread_create。
- 对于更复杂的跨平台需求,可引入第三方可移植库,如:
- Boost:提供大量跨平台组件。
- POCO:轻量级网络与系统抽象库。
- Abseil 或 folly:部分支持跨平台基础功能。
处理操作系统差异的条件编译
某些功能仍需调用系统 API,这时应通过预定义宏隔离平台相关代码。
- 常用宏判断操作系统: #ifdef _WIN32 // Windows #ifdef __linux__ // Linux
- 示例:文件分隔符处理
#ifdef _WIN32
const char path_sep = '\\';
#else
const char path_sep = '/';
#endif - 建议将这类差异封装在头文件或工具函数中,减少重复代码。
使用跨平台构建系统
手动维护不同平台的 Makefile 或 Visual Studio 项目容易出错,推荐使用通用构建工具。
立即学习“C++免费学习笔记(深入)”;
-
CMake 是目前最主流的选择:
- 编写 CMakeLists.txt 定义项目结构。
- 在 Windows 上生成 Visual Studio 工程,在 Linux 上生成 Makefile 或 Ninja 构建脚本。
- 支持自动检测编译器、链接库和系统特性。
- 其他选项包括 premake 或 meson,也具备良好跨平台能力。
注意编译器兼容性
Windows 常用 MSVC,Linux 多用 GCC 或 Clang,三者对 C++ 标准的支持略有差异。
- 尽量启用较新的 C++ 标准(如 C++17 或 C++20),并在各平台测试行为一致性。
- 避免使用编译器特有的扩展语法,如 MSVC 的 __declspec(dllexport),可用宏包装:
#ifdef _WIN32
#define API_EXPORT __declspec(dllexport)
#else
#define API_EXPORT __attribute__((visibility("default")))
#endif - 在 CI/CD 中配置多平台编译检查,及时发现兼容问题。
基本上就这些。只要坚持写标准 C++、合理封装平台差异、使用 CMake 统一构建,并在两个平台上持续测试,就能高效实现跨平台开发。不复杂但容易忽略的是细节一致性,比如换行符、路径、字节序和对齐方式,稍不注意就会引发隐蔽 bug。











