Если вы только что сказали это ...
Conf.h косвенно включается через make-файл.
... во-первых, тогда мы, вероятно, могли бы сэкономить много времени.Однако, чтобы уточнить, о чем я говорю, поскольку вы забыли поставить свой MCVE непосредственно в вопрос, вот код, показывающий, что вы, похоже, имеете в виду:
hello_world.h :
#ifndef SAMPLE_HELLO_WORLD_H
#define SAMPLE_HELLO_WORLD_H
/* PROJECT_CONF_H might be defined in the project Makefile */
#ifdef PROJECT_CONF_H
#include PROJECT_CONF_H
#endif /* PROJECT_CONF_H */
void hello_world();
#endif //SAMPLE_HELLO_WORLD_H
... где PROJECT_CONF_H
не определен где-либо в исходных текстах, а скорее через параметр командной строки компилятора, указанный в Makefile.
В любом случае,Вы спрашиваете:
Проблема заключается в том, что CLion может разрешать макросы, определенные в conf.h (через go, чтобы объявить), но не учитывает их для выделения.
Я думаю, вы пытаетесь сказать, что в файлах, которые включают hello_world.h
, механизмы подсветки кода CLion не распознают ни одно из объявлений (особенно определений макросов) из файла, названного через Makefile PROJECT_CONF_H
.
Это означает, что части с #if всегда свернуты и выделены как комментарии.Вы можете видеть это поведение в hello_world.c.
Можно ли настроить CLion таким образом, чтобы он рассматривал такие объявления или, по крайней мере, отключить свертывание и выделение комментарием?
Хотя весьма вероятно, что CLion может быть настроен на отключение сворачивающихся участков кода, которые подавляются условными выражениями препроцессора, эту проблему винить в CLion трудно.Весьма вероятно, что он анализирует только ваши исходные файлы, а не ваш Makefile, поэтому, насколько это возможно, ваш заголовок конфигурации действительно никогда не включается.Он знает, что заголовок там , так что символы в нем есть в его индексе, но это все.
В этот момент я наблюдаю, что структура кода, такая как present, довольно необычна.В частности, системы сборки, которые предоставляют данные конфигурации во время сборки через файл заголовка, обычно гарантируют, что заголовок всегда присутствует с тем же именем, и работают, устанавливая его содержимое , как необходимо на этапе конфигурации перед сборкой(или требуя от человека сделать это вручную).
Имейте в виду, что избавиться от make-файла невозможно, поскольку это огромный проект со сложной настройкой.
make
- потрясающий инструмент.Нет причин хотеть сбросить make
или Makefile.Но вы должны подумать об изменении этого аспекта.