Citando il GHC manual:
i simboli definiti dai GHC sono elencati di seguito.
[...]
os_HOST_OS=1
- Questo permette di definire la compilazione condizionale in base al sistema operativo, dove os
è il nome del sistema operativo corrente (es. linux
, mingw32
per Windows, solaris
, etc.) .
Quindi, per rilevare se il codice è stato compilato su Windows è necessario utilizzare
#ifdef mingw32_HOST_OS
Ovviamente, è necessario disporre di CPP abilitato per questo al lavoro.
Per coloro che si stanno chiedendo - mingw32_HOST_OS
è definita, inoltre su Windows a 64 bit:
C:\ghc-7.8.2\bin>ghc --info
...
,("Build platform","x86_64-unknown-mingw32")
,("Host platform","x86_64-unknown-mingw32")
,("Target platform","x86_64-unknown-mingw32")
...
C:\ghc-7.8.2\bin>ghc -E -optP-dM -cpp foo.hs
C:\ghc-7.8.2\bin>cat foo.hspp
{-# LINE 1 "foo.hs" #-}
#define __ASSEMBLER__ 1
#define mingw32_HOST_OS 1
#define __GLASGOW_HASKELL__ 708
#define __STDC_HOSTED__ 1
#define TABLES_NEXT_TO_CODE 1
#define x86_64_HOST_ARCH 1
#define x86_64_BUILD_ARCH 1
#define mingw32_BUILD_OS 1
#define __SSE2__ 1
#define __SSE__ 1
Confusamente, mingw64_HOST_OS
non è - utilizzare x86_64_HOST_ARCH
per rilevare a 64 bit di Windows specifico.
fonte
2014-04-20 15:11:25
'#ifdef mingw32_HOST_OS'. –