Могу ли я включать разные файлы в зависимости от платформы? - PullRequest
0 голосов
/ 01 июня 2018

Существует заголовочный файл, который я включил, который, кажется, существует только на машинах Linux, а не на компьютерах MacOS.Хотя я могу использовать виртуальную машину для компиляции и запуска кода, было бы неплохо сделать это в MacOS.

Если говорить более конкретно, я использую #include <endian.h>, который компилируется в Linux, иЯ хотел бы использовать этот заголовок совместимости для MacOS, который я бы включил в #include "endian.h".Мой код компилируется и выполняется, как и ожидалось, с первым включением на машинах Linux, а с последним включением на компьютерах MacOS.

Есть ли способ использовать в заголовке специфичные для платформы включения (возможно, с использованием некоторого вида #if на основе синтаксиса)?Или это будет плохая практика?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Clang и GCC поддерживают условие препроцессора __has_include, которое вы можете использовать вместо определения платформы тестирования:

#if __has_include(<endian.h>)
#include <endian.h>
#else
#include "endian.h"
#endif

Однако стоит обратить внимание на то, что <endian.h> не являетсястандартный заголовок, возможно, он присутствует на другой платформе с другими определениями, которые не очень вам помогают.

Это связано с другим ответом , который я написал несколько дней назад..

0 голосов
/ 01 июня 2018

Есть ли способ использовать специфичные для платформы включения в заголовок (возможно, с использованием некоторого синтаксиса # if)?

yes:

#ifdef __MACH__
... // Mac headers
#elif __unix__
... // these will work for Linux/Unix/BSD even for Mac in most cases
#elif _WIN32
... // windows 32 bit
#elif _WIN64
... // windows 64 bit
#endif

Или это будет плохая практика?

Я так не думаю

Другое решение, если я правильно помню, это установка Command Line Tool на Mac, которая даст вамвсе заголовки для gcc в Unix как страсть.Вот улучшение моего ответа, я знал, что что-то забыл :( Ну да ладно, я использовал Mac только пару раз для разработки: S

  • установите инструменты командной строки из окна Xcode Preferences-> Downloadsили
  • выполнить xcode-select --install из командной строки терминала.

и вот ссылка:

endian.h нетнайдено на Mac OSX

...