68255


LinuxとWindowsで動作するアプリをQt上で作成しています  
同じソースをLinuxとWindowsでそれぞれビルドしているのですが  
ビルドする際にWindowsかLinuxかを判定するようなマクロはないでしょうか

LinuxとWindowsで動作を変えたいのですが  
マクロで切り替えたいのですが探しきれませんでした

Windows側はMinGW64bitを使用しています


CC BY-SA 4.0
2020-07-03T09:57:39.623
68248
2020-07-03T11:57:52.947
15047
question
c++ qt qt-creator
Qt (c++)でWindowsとLinuxを認識するマクロ


この記事が参考になるでしょう。定義済みマクロで識別出来るとあります。  
[How can I detect g++ and MinGW in C++
preprocessor?](https://stackoverflow.com/q/17493759/9014308)  
解決済み回答では無いこちらの方が詳細かと。

> For GCC:
[code]

>     #ifdef __GNUC__
>  
[/code]

>
> For MinGW:
[code]

>     #ifdef __MINGW32__
>  
[/code]

>
> x86_64-w64-mingw32-gcc defines both `__MINGW32__` and `__MINGW64__`.

そして解決済み回答のコメントに最新の情報がSourceForgeに載っているとあります。  
[Pre-defined Compiler Macros](https://sourceforge.net/p/predef/wiki/Home/)  
[Compilers](https://sourceforge.net/p/predef/wiki/Compilers/)

> **MinGW and MinGW-w64**  
>  MinGW (formerly known as MinGW32) is a toolchain for creating 32 Bit
> Windows executables. The MinGW-w64 projects offers toolchains for creating
> 32 Bit and 64 Bit Windows executables. The following table shows which
> macros are defined by each toolchain:
[code]

>     Type           Macro                   Description MinGW32 MinGW-w64
> 32Bit MinGW-w64 64Bit
>     Identification __MINGW32__                         defined defined
> defined
>     Version        __MINGW32_MAJOR_VERSION Version     defined defined
> defined
>     Version        __MINGW32_MINOR_VERSION Revision    defined defined
> defined
>     Identification __MINGW64__                         -       -
> defined
>     Version        __MINGW64_VERSION_MAJOR Version     -       defined
> defined
>     Version        __MINGW64_VERSION_MINOR Revision    -       defined
> defined
>  
[/code]

>
> Notice that `__MINGW32_MAJOR_VERSION`, `__MINGW32_MINOR_VERSION`,
> `__MINGW64_VERSION_MAJOR`, and `__MINGW64_VERSION_MINOR` are only defined if
> appropriate headers are included. Appropriate headers are `<stdlib.h>`,
> `<stdio.h>`, `<windows.h>`, `<windef.h>`, and probably more.


CC BY-SA 4.0
2020-07-03T10:23:28.923
68251
2020-07-03T10:23:28.923
26370
68248
answer


kunifさんの回答にある、コンパイラの判別方法の他に、Qtで定義されているプラットフォーム別のマクロがあります。

<https://wiki.qt.io/Get_OS_name>  
<https://doc.qt.io/qt-5/qtglobal.html>

`#ifdef Q_OS_WIN` や `#ifdef Q_OS_LINUX` を使うと良いです。


CC BY-SA 4.0
2020-07-03T11:57:52.947
68255
2020-07-03T11:57:52.947
3337
68248
answer