Linux, Windows, Mac OS에서 컴파일해야하는 크로스 플랫폼 코드를 작성 중입니다. Windows에서는 Visual Studio와 mingw를 지원해야합니다.
#ifdef .. #endif
환경에 배치해야하는 플랫폼 별 코드가 몇 가지 있습니다. 예를 들어, 여기에 win32 특정 코드를 배치했습니다.
#ifdef WIN32
#include <windows.h>
#endif
그러나 Linux 및 Mac OS를 어떻게 인식합니까? 사용해야하는 정의 이름 (또는 기타)은 무엇입니까?
답변
대한 맥 OS :
#ifdef __APPLE__
들어 는 MinGW Windows에서 :
#ifdef __MINGW32__
들어 리눅스 :
#ifdef __linux__
답변
참조 : http://predef.sourceforge.net/index.php
이 프로젝트는 #defines
많은 운영 체제, 컴파일러, 언어 및 플랫폼 표준, 표준 라이브러리에 대해 사전 정의 된 합리적으로 포괄적 인 목록을 제공합니다 .
답변
내가 사용하는 것은 다음과 같습니다.
#ifdef _WIN32 // note the underscore: without it, it's not msdn official!
// Windows (x64 and x86)
#elif __unix__ // all unices, not all compilers
// Unix
#elif __linux__
// linux
#elif __APPLE__
// Mac OS, not sure if this is covered by __posix__ and/or __unix__ though...
#endif
편집 : 위의 내용이 기본적으로 작동 할 수 있지만 Boost.Predef 참조 페이지를 살펴보고 확인하려는 매크로를 확인하는 것을 잊지 마십시오 . 또는 Boost.Predef를 직접 사용하십시오.
답변
C ++를 작성하는 경우 Boost 라이브러리를 충분히 강력하게 사용하는 것이 좋습니다 .
최신 버전 (1.55)에는 수십 개의 다른 플랫폼 및 아키텍처 인식 매크로와 함께 원하는 것을 정확히 다루는 새로운 Predef 라이브러리가 포함되어 있습니다 .
#include <boost/predef.h>
// ...
#if BOOST_OS_WINDOWS
#elif BOOST_OS_LINUX
#elif BOOST_OS_MACOS
#endif