반응형
전 처리기 매크로에서 플랫폼 / 컴파일러를 식별하는 방법은 무엇입니까?
Linux, Windows, Mac OS에서 컴파일 해야하는 크로스 플랫폼 코드를 작성 중입니다. Windows에서는 Visual Studio 및 Mingw를 지원해야합니다.
#ifdef .. #endif
환경에 배치 해야하는 플랫폼 특정 코드가 있습니다. 예를 들어, 여기에 win32 특정 코드를 배치했습니다.
#ifdef WIN32
#include <windows.h>
#endif
그러나 리눅스와 맥 OS를 어떻게 인식합니까? 사용해야하는 이름 (또는 기타)은 무엇입니까?
대한 맥 OS :
#ifdef __APPLE__
들어 는 MinGW Windows에서 :
#ifdef __MINGW32__
들어 리눅스 :
#ifdef __linux__
다른 Windows 컴파일러를 들어, 확인 이 스레드 및 이 다른 여러 컴파일러와 아키텍처.
참조 : 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
반응형
'development' 카테고리의 다른 글
선택된 ng-option 변경시 가치 얻기 (0) | 2020.07.27 |
---|---|
SQL Server 데이터베이스의 모든 데이터 삭제 (0) | 2020.07.27 |
중첩 된 try catch 블록을 피하기위한 패턴? (0) | 2020.07.27 |
다른 컨트롤러에서 동작으로 리디렉션 (0) | 2020.07.27 |
JSON 객체가 아닌 JSON 배열로 json_encode 스파 스 PHP 배열 (0) | 2020.07.27 |