質問はとても簡単です。呼び出し時に次のようなものを返す関数(C ++)またはメソッドが必要です
"Windows" //or
"Unix"
特別なことは何もありません、私はバージョン番号か何かを必要としません。ただのOS名。簡単なグーグル検索では何も役に立たなかったので、これをここに投稿すると思いました
質問はとても簡単です。呼び出し時に次のようなものを返す関数(C ++)またはメソッドが必要です
"Windows" //or
"Unix"
特別なことは何もありません、私はバージョン番号か何かを必要としません。ただのOS名。簡単なグーグル検索では何も役に立たなかったので、これをここに投稿すると思いました
すべてのオペレーティングシステムで実行される単一のバイナリファイルを作成することはできないため、コードを再コンパイルする必要があります。MACROを使用しても問題ありません。
次のようなマクロを使用する
_WIN32
_WIN64
__unix
__unix__
__APPLE__
__MACH__
__linux__
__FreeBSD__
このような
std::string getOsName()
{
#ifdef _WIN32
return "Windows 32-bit";
#elif _WIN64
return "Windows 64-bit";
#elif __APPLE__ || __MACH__
return "Mac OSX";
#elif __linux__
return "Linux";
#elif __FreeBSD__
return "FreeBSD";
#elif __unix || __unix__
return "Unix";
#else
return "Other";
#endif
}
コンパイラのマニュアルを読んで、コンパイル時にOSを検出するためにそれらが提供するMACROSを確認する必要があります。
Pocoソースコードから:
Win32:
std::string EnvironmentImpl::osNameImpl()
{
OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(vi);
if (GetVersionEx(&vi) == 0) throw SystemException("Cannot get OS version information");
switch (vi.dwPlatformId)
{
case VER_PLATFORM_WIN32s:
return "Windows 3.x";
case VER_PLATFORM_WIN32_WINDOWS:
return vi.dwMinorVersion == 0 ? "Windows 95" : "Windows 98";
case VER_PLATFORM_WIN32_NT:
return "Windows NT";
default:
return "Unknown";
}
}
Unix:
std::string EnvironmentImpl::osNameImpl()
{
struct utsname uts;
uname(&uts);
return uts.sysname;
}