Некоторые компиляторы (если не все) поддерживают такую функциональность: через параметр командной строки можно указать файл или файлы, которые будут подключаться автоматически к каждому обрабатываемому файлу. У GCC это опция `-include ````.
В некоторых проектах используют эту особенность, как результат - явного включения файла нет, а парсер в Qt Creator’е не видит части объявлений.
Решения единого нет: для каждого типа проекта (qmake, cmake, generic & etc), теоретически, оно своё (если есть вообще). В моём случае используется Generic project, для него решение существует.
И решение достаточно простое: Generic Project Mananger использует несколько файлов для хранения настроек проекта:
- ProjectName**.creator**- головной файл, по сути не содержит никакой полезной информации
- ProjectName**.files**- список файлов проекта (может содержать и не исходники)
- ProjectName**.includes**- пути поиска заголовочных файлов
- ProjectName**.config**- как гласит комментарий внутри этого файла: “- ADD PREDEFINED MACROS HERE!”
Вот последний файл самый интересный. Комментарий немного наводит в ступор и мы решаем, что тут можно только писать код вида: #define MACRO some_value
На самом деле, парсером этот файл воспринимается как обычный заголовочный файл и информация из него используется для парсинга всего остального. Чуете профит? Если нет, подсказываю: по сути это и есть наш “pre-included” header для парсера! И писать в нём мы можем всё, что понимается препроцессором (если быть точнее: парсером скеатора). Т.е. мы можем сделать такое: #include “includes/pre-included.h”
И всё, что объявлено в нашем pre-included.h станет доступно парсеру при обработке каждого файла. Дело сделано!
Было бы любопытно узнать как такое можно реализовать для Qmake и Cmake проектов.
PS вопрос этот я поднял в списке рассылки Qt Creator’а, пока ждал ответ, в голову пришла идея с #include, в результате список только подтвердил моё изыскание :)
UPDATE: рано обрадовался, внезапно, решение отказалось работать. Имхо, причина в несовсем корректном использовании .config файла.
