Как надежно обнаружить собственную сборку Windows при кросс-компиляции с MXE?C++

Программы на C++. Форум разработчиков
Anonymous
Как надежно обнаружить собственную сборку Windows при кросс-компиляции с MXE?

Сообщение Anonymous »

Я работаю над сборкой Alembic с использованием MXE, где моим хостом является Linux (Ubuntu работает под управлением WSL в Windows), а целевой — Windows.

Код: Выделить всё

#if defined _WIN32
#include 
#endif
Это отлично работает при компиляции в Windows. Однако при кросс-компиляции с помощью MXE _WIN32 и _WIN64 определены, даже если хостом является Linux, поэтому не существует и сборка завершается с ошибкой. Удаление этих проверок #if и их содержимого позволяет выполнить сборку успешно.
Сначала я просмотрел ответ StackOverflow: Существует ли макрос компилятора для обнаружения Windows?, который предлагает использовать _WIN32. Но при кросс-компиляции MXE _WIN32 ненадежен, поскольку он указывает только на целевой объект Windows, а не на собственный хост Windows.
Вопрос:

Существует ли макрос препроцессора, переменная CMake или другой метод для надежного определения собственной сборки Windows по сравнению с целью кросс-компиляции?
Это позволит таким проектам, как Alembic, включать заголовки Windows только тогда, когда они действительно доступны, избегая сбоев кросс-компиляции. Для более подробной информации, вот конкретная проблема, с которой я столкнулся:

Подробнее здесь: https://stackoverflow.com/questions/798 ... g-with-mxe

Вернуться в «C++»