Windows 및 Linux에서의 C++ 컴파일: ifdef 스위치
Linux와 Windows에서 c++ 코드를 실행하고 싶습니다.한 운영 체제에만 포함시키고 다른 운영 체제에는 포함하지 않는 코드가 있습니다.한 번 사용할 수 있는 표준 #ifdef가 있습니까?
예를 들어 다음과 같습니다.
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error "OS not supported!"
#endif
그 질문은 사실 중복되지만, 여기 답이 훨씬 더 낫습니다. 특히 받아들여진 질문이 그렇습니다.
용도:
#ifdef __linux__
//linux code goes here
#elif _WIN32
// windows code goes here
#else
#endif
다음 작업을 수행할 수 있습니다.
#if MACRO0
//code...
#elif MACRO1
//code...
#endif
…식별자는 다음과 같습니다.
__linux__ Defined on Linux
__sun Defined on Solaris
__FreeBSD__ Defined on FreeBSD
__NetBSD__ Defined on NetBSD
__OpenBSD__ Defined on OpenBSD
__APPLE__ Defined on Mac OS X
__hpux Defined on HP-UX
__osf__ Defined on Tru64 UNIX (formerly DEC OSF1)
__sgi Defined on Irix
_AIX Defined on AIX
_WIN32 Defined on Windows
답변이 아닌 Qt에 같은 사람이 있는 경우 추가되는 것으로 알고 있습니다.
인Qt
https://wiki.qt.io/Get-OS-name-in-Qt
QString Get::osName()
{
#if defined(Q_OS_ANDROID)
return QLatin1String("android");
#elif defined(Q_OS_BLACKBERRY)
return QLatin1String("blackberry");
#elif defined(Q_OS_IOS)
return QLatin1String("ios");
#elif defined(Q_OS_MAC)
return QLatin1String("osx");
#elif defined(Q_OS_WINCE)
return QLatin1String("wince");
#elif defined(Q_OS_WIN)
return QLatin1String("windows");
#elif defined(Q_OS_LINUX)
return QLatin1String("linux");
#elif defined(Q_OS_UNIX)
return QLatin1String("unix");
#else
return QLatin1String("unknown");
#endif
}
사용하는 컴파일러에 따라 다릅니다.
예를 들어, Windows 의 정의는 다음과 같습니다.WIN32
또는_WIN32
.
Linux의 정의는 다음과 같습니다.UNIX
또는__unix__
또는LINUX
또는__linux__
.
이 응답은 매크로 전쟁이 아니라 일치하는 플랫폼을 찾을 수 없는 경우 오류가 발생합니다.
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error Platform not supported
#endif
한다면#error
는 지원되지 않습니다.static_assert(C++0x) 키워드를 사용할 수 있습니다.또는 커스텀 STATIC_ASSERT를 실장하거나 사이즈0의 배열을 선언하거나 케이스가 중복된 스위치를 사용할 수도 있습니다.즉, 실행 시가 아닌 컴파일 시 오류가 발생합니다.
컴파일러에 따라 다릅니다.Linux 에서는 G++ 를, Windows 에서는 VC++ 를 사용해 컴파일 하는 경우는, 다음과 같이 됩니다.
#ifdef linux
...
#elif _WIN32
...
#else
...
#endif
아니요, 이러한 정의는 컴파일러에 의존합니다.사용자 정의 집합을 사용하여 Makefile에서 설정할 수 있습니다.자세한 내용은 이 스레드를 참조하십시오.
언급URL : https://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch
'programing' 카테고리의 다른 글
awk 또는 sed를 사용하여 문자열을 재귀적으로 검색/교체하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
---|---|
Windows 명령어프롬프트에서 환경변수를 갱신하는 명령어가 있습니까? (0) | 2023.04.10 |
Windows에서 스크린샷을 파일에 직접 저장하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
Echo newline in Bash prints 리터럴 \n (0) | 2023.04.10 |
C#에서 현재 사용자의 데스크톱 경로를 얻는 방법 (0) | 2023.04.10 |