C++ en todas partes: cómo escribir código para Windows, Linux y macOS a la vez

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Un día escribirás código que se ejecutará en todas partes

\n

Imagina: creas un proyecto genial en C++, todo funciona perfectamente en Windows. Tu amigo te pide compilar una versión para Linux. Suspiras, te metes en el Makefile, cambias rutas, compiladores, te topas con #ifdef _WIN32 y después de tres horas obtienes un binario que igualmente falla con segmentation fault. ¿Te suena?

\n

El desarrollo multiplataforma en C++ no es magia, sino un conjunto de disciplinas y herramientas. En este artículo analizaremos cómo escribir código que funcione en Windows, Linux y macOS sin lágrimas, con ejemplos de código real y soluciones listas. ¡Vamos allá!

\n\n

Por qué C++ es ideal para la multiplataforma (y por qué es un dolor)

\n

Los puntos fuertes de C++ —compilabilidad, rendimiento y control de memoria— lo convierten en el rey de la programación de sistemas. Pero esto tiene un precio: cada SO tiene sus propias API, compiladores (MSVC, GCC, Clang) y peculiaridades del sistema de archivos.

\n

Los principales escollos:

\n
    \n
  • Diferentes archivos de cabecera — windows.h vs unistd.h
  • \n
  • Diferentes macros — _WIN32, __linux__, __APPLE__
  • \n
  • Diferentes compiladores — MSVC no soporta las extensiones de GCC
  • \n
  • Diferentes bibliotecas — carga dinámica (DLL vs .so)
  • \n
\n

Pero no temas: todos estos problemas tienen solución. Lo principal es elegir el enfoque correcto desde el principio.

\n\n

Herramienta nº1: CMake — tu compilador universal

\n

Si escribes una aplicación multiplataforma en C++, tu mejor amigo es CMake. No es un sistema de compilación como Make, sino un generador de archivos de compilación: crea Makefile para Linux/macOS y .sln para Visual Studio en Windows.

\n

Aquí tienes un CMakeLists.txt mínimo que funciona en todas partes:

\n
cmake_minimum_required(VERSION 3.16)\nproject(CrossPlatformApp VERSION 1.0 LANGUAGES CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# Añadimos el ejecutable\nadd_executable(myapp main.cpp utils.cpp)\n\n# Gestión multiplataforma\nif(WIN32)\n    target_compile_definitions(myapp PRIVATE PLATFORM_WINDOWS)\n    target_link_libraries(myapp PRIVATE ws2_32)  # sockets en Windows\nelseif(APPLE)\n    target_compile_definitions(myapp PRIVATE PLATFORM_MACOS)\n    target_link_libraries(myapp PRIVATE "-framework CoreFoundation")\nelse()\n    target_compile_definitions(myapp PRIVATE PLATFORM_LINUX)\nendif()
\n

Como ves, target_compile_definitions permite definir macros para cada plataforma. En el código las usas así:

\n
#ifdef PLATFORM_WINDOWS\n    #include <windows.h>\n    void sleep_ms(int ms) { Sleep(ms); }\n#else\n    #include <unistd.h>\n    void sleep_ms(int ms) { usleep(ms * 1000); }\n#endif
\n

CMake es el estándar de facto. Si tu proyecto no lo usa, es hora de cambiar de enfoque.

\n\n

Boost y Qt: soluciones listas para problemas complejos

\n

Escribir todo desde cero es cosa de héroes y masoquistas. Para el desarrollo multiplataforma en C++ existen bibliotecas maduras que ocultan las diferencias entre SO.

\n

Boost — la navaja suiza

\n

Boost.Asio — para programación de redes (funciona tanto en Windows como en Linux). Boost.Filesystem — para trabajar con archivos (reemplaza a std::filesystem si tienes un compilador antiguo). Ejemplo de lectura multiplataforma de un directorio:

\n
#include <boost/filesystem.hpp>\nnamespace fs = boost::filesystem;\n\nvoid list_files(const std::string& path) {\n    for (const auto& entry : fs::directory_iterator(path)) {\n        std::cout << entry.path().string() << std::endl;\n    }\n}
\n

Este código se compilará en cualquier SO sin un solo #ifdef.

\n\n

Qt — un framework completo

\n

Si necesitas interfaz gráfica, trabajo en red, bases de datos o multitarea, Qt es tu elección. Proporciona una API unificada para todas las plataformas. Al

Blogs

Book Recommendations