Я разрабатываю программное обеспечение на платформе Arch Linux с помощью NCurses. Он имеет #include <ncurses.h>
в глобальном заголовке.
Мой сотрудник работает в Windows и эмулирует оболочку bash с Cygwin. Однако cygwin устанавливает библиотеки ncurses, так что вы должны использовать #include <ncurses/ncurses.h>
. Это тривиально изменить, но наша история Git может состоять из этой линии, меняющейся взад и вперед несколько раз, если один из нас забыл, что кажется глупым.
Есть ли какая-то проверка препроцессора, которую я мог бы сделать, чтобы использовать соответствующий путь?
Как сказал @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.
#ifdef
, ...
-I/path/to/my_ncurses
на конкретной машине, просто предоставляя альтернативу на тот случай, если они не захотят настроить файлы конфигурации. С другой стороны, иногда вы должны выполнять такие проверки в самом Makefile
(или файле конфигурации), но, опять же, я согласен, код должен быть максимально чистым.
-I
чтобы указать каталог включения. Таким образом, на одной машине вы можете создать с-I/path/to/ncurses/include
а на другой-I/different/ncurses/include/ncurses
, так что вы можете использовать только#include <ncurses.h>
на обеих.pkg-config
- это хороший способ получить все необходимые флаги gcc, включая пути, пути к библиотекам и т. Д., И он был установлен по умолчанию в каждом дистрибутиве Linux, на котором я когда-либо пытался его использовать.