Estoy escribiendo una aplicación C++ portátil. ¿Cómo incluyo diferentes encabezados basados en el sistema operativo en el que se ejecuta? ¿Hay alguna manera de hacer esto en C++ o tengo que usar el sistema de compilación?¿Cómo incluyo diferentes encabezados basados en mi sistema operativo?
Respuesta
con preprocesador:
#ifdef _SUNOS
//code
#elseif _LINUX
//code
#elseif _HPUX
//code
#elseif _WIN32
//code
#else
#error OS not supported
#endif
Aquí hay una [lista de macros predefinidas] (http://predef.sourceforge.net/preos.html). – roshanvid
@ c0smikdebris: gracias :) – BlackBear
Tenga en cuenta que _WIN32 se define tanto en Windows de 32 bits como en Windows de 64 bits. – user763305
Desarrollamos en Linux (Red Hat Enterprise 5), Sun (Solaris) y Windows. Nuestro sistema es usar algo como esto:
#ifndef MSWINDOWS
#include <unistd.h>
#else
#include <winbase.h>
#endif
//More includes here
Me gustaría utilizar las directivas del preprocesador y un sistema de construcción de plataforma cruzada como CMake. Se podría hacer:
#ifdef LINUX
#include <unistd.h>
#elif defined(WINDOWS)
#include <algorithm.h>
# elif Defined(MAC_OSX)
//... etc.
#else
#error No operating system defined
#endif
A continuación, agregue la bandera preprocesador correspondiente a la construcción, tales como: -DLINUX
.
Creo que esta es una buena idea. Últimamente intenté hacer esto usando las definiciones usadas por los compiladores, pero me di por vencido, hay tantas variaciones y otras cosas. Me resultó más fácil usar mi propia definición, establecida por el sistema de compilación. – Skurmedel
- 1. Adobe AIR y diferentes sistemas de archivos del sistema operativo
- 2. ¿Por qué mi aplicación para Android asigna cantidades sustancialmente diferentes de memoria en diferentes versiones del sistema operativo?
- 3. Cómo determinar el sistema operativo
- 4. ¿Cómo detectar el sistema operativo en ejecución?
- 5. Detectar el sistema operativo
- 6. Cómo determinar el sistema operativo en elisp?
- 7. ¿Cómo habilita mod_rewrite en cualquier sistema operativo?
- 8. Portando NewLib para mi sistema operativo: algunas preguntas
- 9. Detectar sistema operativo en Clojure
- 10. ¿Cómo puedo encontrar en qué sistema operativo se está ejecutando mi programa Ruby?
- 11. Sistema operativo de espacio aislado
- 12. Desarrollo de un sistema operativo
- 13. Actualizar sistema operativo Android programáticamente
- 14. ¿Cómo puedo saber en qué dispositivos/versiones de sistema operativo se está ejecutando mi aplicación iOS?
- 15. ¿Encontrar registros basados en diferentes campos/columnas?
- 16. Pilas NFC en el sistema operativo Android
- 17. malloc en un sistema integrado sin un sistema operativo
- 18. Determine el sistema operativo en .vimrc
- 19. sistema operativo y aplicaciones WPF
- 20. ¿Cómo incluyo archivos .class en mi proyecto en Eclipse? (Java)
- 21. C biblioteca de sistema operativo independiente
- 22. Libros de Android en el sistema operativo
- 23. ¿Cómo incluyo Red C++ 2010 redistribuido en mi configuración?
- 24. ¿Cómo incluyo archivos DLL en mi archivo .csproj?
- 25. ¿Cómo incluyo archivos JAR externos en mi propio proyecto JAR
- 26. ¿Cómo incluyo una tubería? en mi linux find -exec comando?
- 27. javax.crypto funciona de manera diferente en las diferentes versiones del sistema operativo Android?
- 28. ¿Cómo detectar el sistema operativo en un archivo make?
- 29. jQuery - detectando el sistema operativo y la versión del sistema operativo
- 30. El sistema operativo está eliminando el hilo
Allí, lo hizo. Gracias por recordarme. – roshanvid
De nada. Pero * por favor * haz esto en el sistema de construcción, hará que tu software sea mucho más fácil de mantener. Si los módulos no se pueden escribir de una manera independiente de la plataforma (a menudo pueden, especialmente con bibliotecas como Boost o Qt), entonces diseñe sus propias abstracciones sobre las instalaciones del sistema operativo e impleméntelas varias veces. –
Todas buenas respuestas. Lo siento si digo lo obvio, pero tenga en cuenta que, en general, es una buena idea favorecer encabezados y bibliotecas que son multiplataforma. Siempre que la [Biblioteca estándar de C++] (http://en.wikipedia.org/wiki/C%2B%2B_standard_library) tenga lo que necesita, pregúntese por qué elegiría una alternativa. –