Обработка путей #include на разных платформах

2

Я разрабатываю программное обеспечение на платформе Arch Linux с помощью NCurses. Он имеет #include <ncurses.h> в глобальном заголовке.

Мой сотрудник работает в Windows и эмулирует оболочку bash с Cygwin. Однако cygwin устанавливает библиотеки ncurses, так что вы должны использовать #include <ncurses/ncurses.h>. Это тривиально изменить, но наша история Git может состоять из этой линии, меняющейся взад и вперед несколько раз, если один из нас забыл, что кажется глупым.

Есть ли какая-то проверка препроцессора, которую я мог бы сделать, чтобы использовать соответствующий путь?

  • 6
    Это должно быть частью вашего make-файла (или эквивалента Windows). Поэтому, используя gcc, вы можете использовать опцию -I чтобы указать каталог включения. Таким образом, на одной машине вы можете создать с -I/path/to/ncurses/include а на другой -I/different/ncurses/include/ncurses , так что вы можете использовать только #include <ncurses.h> на обеих.
  • 0
    Обратите внимание, что pkg-config - это хороший способ получить все необходимые флаги gcc, включая пути, пути к библиотекам и т. Д., И он был установлен по умолчанию в каждом дистрибутиве Linux, на котором я когда-либо пытался его использовать.
Показать ещё 2 комментария
Теги:
ncurses

1 ответ

0
Лучший ответ

Как сказал @BoBTFish, вы должны указать путь включения в Makefile (по-разному для каждой платформы). Если нет, вы можете использовать макрос __CYGWIN__ (или __CYGWIN32__, не уверенный, какой из них будет работать), чтобы определить, используете ли вы cygwin, например

#ifdef __CYGWIN__
#include <ncurses/ncurses.h>
#else
#include <ncurses.h>
#endif

Подробнее см. Http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/predefined-macros-platform.html.

  • 1
    Это не столько make-файл, сколько конфигурация, которую вы собираете. Вы должны как-то настраивать свою сборку (очевидно, как вы строите). Я хочу сказать, что эту разницу следует обрабатывать на этом уровне, если это возможно, а не в коде. Когда вы добавляете третью платформу, вы добавляете третью, #ifdef , ...
  • 1
    Правильно, я согласен, я бы также использовал -I/path/to/my_ncurses на конкретной машине, просто предоставляя альтернативу на тот случай, если они не захотят настроить файлы конфигурации. С другой стороны, иногда вы должны выполнять такие проверки в самом Makefile (или файле конфигурации), но, опять же, я согласен, код должен быть максимально чистым.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню