Cytowanie GHC manual:
Symbole zdefiniowane GHC są wymienione poniżej.
[...]
os_HOST_OS=1
- To pozwala określić kompilacja warunkowa w oparciu o system operacyjny, gdzie os
jest nazwą bieżącego systemu operacyjnego (. Np linux
, mingw32
dla Windows, solaris
, itd.) .
Tak, aby wykryć, czy kod jest kompilowany w systemie Windows należy użyć
#ifdef mingw32_HOST_OS
Oczywiście, musisz mieć włączony CPP za to do pracy.
Dla tych, którzy zastanawiają się - mingw32_HOST_OS
jest również określona na 64-bitowym systemie Windows:
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
Confusingly, mingw64_HOST_OS
nie jest - używać x86_64_HOST_ARCH
wykryć 64-bitowego systemu Windows specjalnie.
'#ifdef mingw32_HOST_OS'. –