Как определить платформу / компилятор из макросов препроцессора?
Я пишу кросс-платформенный код, который должен компилироваться в linux, windows, Mac OS. В windows я должен поддерживать visual studio и mingw.
есть некоторые части специфичного для платформы кода, которые я должен поместить в #ifdef .. #endif окружающая среда. Например, здесь я разместил специфический код win32:
#ifdef WIN32
#include <windows.h>
#endif
но как я узнаю linux и mac OS? То, что определяет имена (или т. д.) Я должен использовать?
4 ответов:
см.: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... #endifEDIT: хотя вышеизложенное может работать для основы, не забудьте проверить, какой макрос вы хотите проверить, посмотрев на импульс.Справочник предопределенных страниц. Или просто используйте Boost.Предопределенных напрямую.
Если вы пишете C++, я не могу рекомендовать использовать Boost библиотеки достаточно сильно.
последняя версия (1.55) включает в себя новый Predef библиотека, которая охватывает именно то, что вы ищете, наряду с десятками других макросов распознавания платформы и архитектуры.
#include <boost/predef.h> // ... #if BOOST_OS_WINDOWS #elif BOOST_OS_LINUX #elif BOOST_OS_MACOS #endif
Comments