mingw32 и mingw64 - как отличить в какой среде оно запущено ? Вариантов минимум два, или на Linux, или на Windows.
Определять надо в коде, скрипты и прочие внешние средства не подходят.
Пробовал смотреть на __STDC__
, __STDC_VERSION__
вроде есть в обеих случаях с -std=gnu99, была надежда что версии разные, но нет, одинаковые.
Всякие системные, типа __linux
они естественно убраны.
Проверял как кодом, так и:
i686-w64-mingw32-gcc -dM -E - < /dev/null
Задача отличить кросс компиляцию от нативной. Связано с различной декларацией функций в этих случаях.
Упрощенный пример, есть:
#if defined(__MINGW32__)
int vswprintf(wchar_t*, const wchar_t*, va_list);
#endif
хочется:
#if (defined(__MINGW32__) && !defined(__CROSS_COMPILE_TIME__))
int vswprintf(wchar_t*, const wchar_t*, va_list);
#endif
Непонятен вопрос, как может быть экзешник запущен в Linux. А Linux-бинарник без libstdc++.o
. Если не в лом компилируй с define под что
. Я в винде не компайлил, но вдруг это есть. Попробуй функцию uname
:
#include <sys/utsname.h>
struct utsname buf;
if( ! uname( & buf)) strcmp(buf.sysname,"Linux" )
В результате поисков решения перешел от дефайнов компилятора к системе сборки, как и советовал @Fat-Zer.
Но там тоже оказалось не без подводных камней, mingw64-cmake
полностью симулирует платформу Windows, и про то что оно заводиться из под Linux
узнать из переменных Cmake
невозможно.
Нашел вероятно не самый прямой путь, но вроде работает, может пригодиться кому:
CMakeLists.txt
find_program(BUILD_OS_NAME
uname
/bin
/usr/bin
/usr/local/bin
/sbin
)
mark_as_advanced(
BUILD_OS_NAME
)
......
if(${BUILD_OS_NAME} STREQUAL "BUILD_OS_NAME-NOTFOUND")
message("-- No cross-compile mode")
else()
message("-- Cross-compile UNIX platform to Win")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__CROSS_COMPILE_TIME__")
endif()
Виртуальный выделенный сервер (VDS) становится отличным выбором
ЗдравстуйтеЕсть необходимость собрать проект весом не более 1 мб, но 1 класс в проекте весит около 13мб
Подскажите, можно ли через WinApi определить кодировку переданной строки char* ? Мне нужно по переданной строке сравнивать является и она Utf8 или...
Возможно ли вообще использовать эту библиотеку на mac и как это сделать?
Возник вопрос по SDL2нужно сделать так чтобы картинку я мог вставить по 4 координатам(для того чтобы растягивать изменять пропорциию картинки...