development

전 처리기 매크로에서 플랫폼 / 컴파일러를 식별하는 방법은 무엇입니까?

big-blog 2020. 7. 27. 07:18
반응형

전 처리기 매크로에서 플랫폼 / 컴파일러를 식별하는 방법은 무엇입니까?


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

참고 URL : https://stackoverflow.com/questions/4605842/how-to-identify-platform-compiler-from-preprocessor-macros

반응형