Никак не могу понять простую вещь.
Мне необходимо подключать заголовочные файлы относительно корня проекта. Надоело указывать относительные пути, потому что из разных каталогов проекта путь до одно и того же заголовка будет разный. Да и вообще относительные пути - это неправильно.
Насколько я выяснил, в Linux можно добавлять в переменную окружения INCLUDE_PATH путь к каталогу проекта. После чего будут работать директивы #include с файлами относительно корня проекта:
...препроцессор последовательно перебирает пути в INCLUDE_PATH начиная с первого. Относительный путь из директивы include разрешается относительно (sic) папки из INCLUDE_PATH. Если файл не найден, переходим к следующему элементу INCLUDE_PATH. Если INCLUDE_PATH исчерпан, компилятор сообщает об ошибке.
Однако возникают вопросы.
1. Какой путь добавлять к INCLUDE_PATH? Относительно корня файловой системы? Но тогда проект не будет собираться в другом каталоге, например, когда пользователь захочет самостоятельно скомпилировать проект, ведь у него не будет установлен нужный каталог в INCLUDE_PATH.
2. Где и как прописывать INCLUDE_PATH? Я поковырял исходники (Makefile) нескольких C/C++ опенсорчных проектов и не нашел никакой работы с INCLUDE_PATH. Значит, делают как-то по-другому, но как?
3. Проект кроссплатформенный. Необходимо понять, как и где настраивать INCLUDE_PATH (предположим, что используется система сборки make), чтобы компиляция шла и в Linux и в Windows под GCC.
4. Проект кроссплатформенный на Qt4. Необходимо понять, как и где настраивать INCLUDE_PATH, чтобы компиляция шла и в Linux и в Windows под GCC.