Допустим, нам необходимо подключать заголовочные файлы относительно корня проекта. Надоело указывать относительные пути, потому что из разных каталогов проекта путь до одно и того же заголовка будет разный. Да и вообще относительные пути - это неправильно. Нам нужно научиться указывать пути до заголовочных файлов просто относительно корня проекта.
Обычно, для компиляциив в Linux, можно добавлять в переменную окружения INCLUDE_PATH путь к каталогу проекта. После чего будут работать директивы #include с файлами относительно корня проекта. Вот что написано в "Стандарте программирования на C++. Версия 0.1.1.2b":
...препроцессор последовательно перебирает пути в INCLUDE_PATH начиная с первого. Относительный путь из директивы include разрешается относительно (sic) папки из INCLUDE_PATH. Если файл не найден, переходим к следующему элементу INCLUDE_PATH. Если INCLUDE_PATH исчерпан, компилятор сообщает об ошибке.
Теперь вопрос: как подключать (инклюдить) заголовки относительно корня проекта кроссплатформенно на Qt?
Ответ: начиная с версии Qt 4.5, в *.pro файле можно использовать переменную $${_PRO_FILE_PWD_}, которая содержит путь до *.pro файла.
То есть, если сырцы лежат в поддиректории src относительно *.pro файла:
.. [DIR]
src [DIR]
myprogram.pro
то путь INCLUDE_PATH можно задать так:
INCLUDEPATH += $${_PRO_FILE_PWD_}/src
- эту строку надо прописывать в *.pro файле, в нашем случае в myprogram.pro.
После этого в C++ коде можно будет указывать пути к файлам в директиве #include относительно корня проекта.