c++ - parametros - compilar y ejecutar c en linux
¿Cómo pruebo en tiempo de compilación la versión actual de GCC? (4)
Me gustaría incluir un archivo diferente según la versión de GCC. Más precisamente, quiero escribir:
#if GCC_VERSION >= 4.2
# include <unordered_map>
# define EXT std
#elif GCC_VERSION >= 4
# include <tr1/unordered_map>
# define EXT std
#else
# include <ext/hash_map>
# define unordered_map __gnu_cxx::hash_map
# define EXT __gnu_cxx
#endif
No me importa gcc antes de 3.2.
Nota: Estoy bastante seguro de que hay una variable definida en el tiempo de preprocesamiento para eso, simplemente no puedo encontrarlo nuevamente.
Hay una serie de macros que deberían definirse para sus necesidades:
__GNUC__ // major
__GNUC_MINOR__ // minor
__GNUC_PATCHLEVEL__ // patch
El formato de la versión es major.minor.patch, por ejemplo, 4.0.2
La documentación para estos se puede encontrar aquí .
Ok, después de más búsquedas, una forma posible de hacerlo es usar __GNUC_PREREQ
definido en features.h
.
#ifdef __GNUC__
# include <features.h>
# if __GNUC_PREREQ(4,0)
// If gcc_version >= 4.0
# elif __GNUC_PREREQ(3,2)
// If gcc_version >= 3.2
# else
// Else
# endif
#else
// If not gcc
#endif
puede analizar la versión de gcc por gcc --version. En un script bash, ejecutaría ese comando como $ (gcc --version). para mantenerlo en una var se podría decir: GCC_VERSION = $ (gcc --version)
éxito
Como nota al margen:
Para encontrar todas las macros predefinidas:
- Crear un archivo vacío t.cpp
-
g++ -E -dM t.cpp