2016-05-19 5 views
0

Как я могу надежно обнаруживать стандартную библиотеку msvc через препроцессор?Обнаруживать стандартную библиотеку msvc

Не компилятор msvc с проверкой _MSC_VER, а другой компилятор, использующий эту библиотеку?

Я ищу конкретный макрос препроцессора как __MINGW32__ в MinGW, __MINGW64_VERSION_MAJOR в MinGW-w64

Это просто академический вопрос.

+0

Вы спрашиваете, есть ли способ обнаружить это в компилированном объекте? (.lib, .dll, .so, .o, .exe, что угодно) – vu1p3n0x

+0

Вы говорите о случаях, таких как mingw-gcc, который создает исполняемые файлы, связанные с MSVCRT.DLL? –

+0

Поскольку это всего лишь академический вопрос, я предлагаю вам просто отказаться от него. Нет надежного способа (что я знаю) делать то, что вы хотите. И почему вы хотите в первую очередь? Компиляторы и их стандартные библиотеки довольно тесно связаны - не пытайтесь использовать один с другим ... –

ответ

1

Прежде всего, не компилируйте библиотеки msvc с другим компилятором, они зависят от поведения компилятора msvc и определяют.

Во-вторых, в каждом стандартном заголовке библиотеки msvc нет ничего, что вы могли бы использовать для тестирования. Даже если бы это была реализация, она была определена и также может быть определена другой реализацией стандартной библиотеки.

Это говорит о том, что #include <iostream> примерно такой же универсальный, как и он. Вы можете просмотреть этот файл для достаточно уникального определения, которое вы могли бы отключить. Например, _IOSTREAM_.

+0

clang умеет использовать библиотеку msvc, но с некоторыми определенными флагами, пытаясь эмулировать компилятор msvc. http://clang.llvm.org/docs/MSVCCompatibility.html –

+0

если здесь нет общего решения, то это лучший способ. –

+0

Итак, вы пытаетесь решить, какой компилятор использует библиотеки? Если это так, то '_MSC_VER' именно то, что вы хотите, оно определяется компилятором не стандартной реализацией: https://msdn.microsoft.com/en-us/library/b0084kay.aspx –

Смежные вопросы