Некоторые компиляторы (если не все) поддерживают такую функциональность: через параметр командной строки можно указать файл или файлы, которые будут подключаться автоматически к каждому обрабатываемому файлу. У 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
файла.