CLion не разрешает все макросы - PullRequest
0 голосов
/ 24 мая 2018

У меня есть 5 файлов (+ makefile):

  • hello_city.h, hello_world.h, hello_world.c: эти файлы отображают структуру, используемую в приложении.Это позволяет некоторые конфигурации в зависимости от потребностей приложения.В файлах #if и #endif используется для включения и выключения исходного кода, который соответствует определенным параметрам.
  • main.c: представляет приложение
  • conf.h:определяет флаги конфигурации.

conf.h косвенно включается через makefile.

Проблема заключается в том, что CLion может разрешать макросы, определенные в conf.h (с помощью перехода к объявлению), но не рассматривает их для выделения.Это означает, что детали с #if всегда свернуты и выделены как комментарии.Вы можете видеть это поведение в пределах hello_world.c.

Возможно ли настроить CLion таким образом, чтобы он рассматривал такие объявления или, по крайней мере, отключил свертывание и выделение комментарием?Имейте в виду, что избавиться от makefile невозможно, поскольку это огромный проект со сложной настройкой.( оригинальный источник )

Исходные файлы для упрощенного примера можно найти здесь: https://gist.github.com/Benedikt1992/05d01948ed1638e656b1dfbad244337c

ОБНОВЛЕНИЕ: упрощение ивыяснение базовой проблемы

1 Ответ

0 голосов
/ 26 мая 2018

Если вы только что сказали это ...

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.Но вы должны подумать об изменении этого аспекта.

...