Определение символов препроцессора для анализатора CLion

В моем проекте есть файл, заключенный в директиву препроцессора ifdef

#ifdef SOME_SYMBOL
... entire file ...
#endif

SOME_SYMBOL определяется другим файлом, который был скомпилирован перед этим, и код работает, как и ожидалось, но статический анализатор не знает об этом символе и поэтому считает, что SOME_SYMBOL не определен. Весь файл не имеет подсветки синтаксиса, а часть анализа просто пропущена (например, подсветка синтаксических ошибок).

Есть ли способ указать анализатору, что этот символ следует рассматривать как определенный, не определяя его в CMakeLists.txt?

У меня нет возможности определить SOME_SYMBOL в CMakeLists.txt, поскольку проект зависит от того, что он не определен в некоторых путях компиляции (изменить это было бы почти невозможно).

Обновление:
Похоже, что в настоящее время это нерешенная проблема с JetBrains. См. Ошибка CPP-2286.


person Neowizard    schedule 03.09.2015    source источник
comment
Есть вероятность, что вам нужно найти подходящий контекст включения для файла. Если у вас есть видимая строка состояния, вы можете увидеть раскрывающийся список «Контекст:» в правом нижнем углу. Просто попробуйте некоторые.   -  person uta    schedule 04.02.2016


Ответы (3)


Чтобы получить подсветку синтаксиса: Перейдите в «Настройки» ⇒ «Редактор» ⇒ «Цвета и шрифты» ⇒ «C/C++» и снимите все галочки «Условно некомпилируемый код». Таким образом, весь код будет отображаться с обычной подсветкой.

person toothstone    schedule 22.03.2016
comment
Спасибо, но я не могу найти ни одного флажка с заголовком, напоминающим Условно некомпилируемый код. - person Neowizard; 26.03.2016
comment
Спасибо, это работает - просто в превью не отображается, что подсветка восстановлена ​​для этих блоков. - person Stecman; 09.11.2017
comment
Для самой последней версии CLion 2020 года это: Настройки / Редактор / Color_Scheme / C/C++: убрать галочку «Передний план» «Условно нескомпилированный код». - person robsn; 19.05.2020
comment
@robsn спасибо, это работает. Однако IDE по-прежнему не позволяет перемещаться по этому коду. Примечательно, что вы не можете Ctrl + щелчок левой кнопкой мыши по содержимому. Это не кликабельно - person SergeiK; 12.04.2021

Теперь у Clion есть макрос, который можно использовать для обнаружения IDE: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360

#ifdef __JETBRAINS_IDE__
    // Stuff that only clion will see goes here
#endif

Это позволяет вам вводить определения, чтобы заставить clion правильно отображать ваш код в тех случаях, когда он не может быть достаточно умным, чтобы понять это.

Значение макроса __JETBRAINS_IDE__ представляет собой строку версии для IDE. Для разных IDE Jetbrains существуют определенные версии макроса: __CLION_IDE__, __STUDIO_IDE__ (для Android Studio) и __APPCODE_IDE__ (для AppCode).

Ура!

Примечание. На момент написания это доступно только в последней версии CLion EAP.

person Chris Kitching    schedule 17.02.2017

Задача не имеет решения для общего случая. Но! Вы можете найти целевой и связанный с ним контекст разрешения, где определен SOME_SYMBOL.

...в строке состояния вы можете найти кнопку Решить Средство выбора контекста для переключения между контекстами Debug, Release, RelWithDebInfo и MinSizeRel для разрешения вашего кода в IDE с нужными определениями.

person uta    schedule 25.05.2016