在我的项目中有一个文件包含在ifdef预处理器指令
#ifdef SOME_SYMBOL
... entire file ...
#endif
SOME_SYMBOL是由在此之前编译的另一个文件定义的,并且代码按预期工作,但是静态分析器不知道这个符号,因此它将SOME_SYMBOL视为未定义。整个文件没有语法高亮显示,一些分析只是被跳过(例如语法错误高亮显示)。
是否有一种方法可以告诉分析器将此符号视为定义而无需在CMakeLists.txt中定义它?
我没有在CMakeLists.txt中定义SOME_SYMBOL的选项,因为项目依赖于它在某些编译路径中未定义(改变这几乎是不可能的)。
更新:似乎这是目前JetBrains的一个公开问题。参见Issue pcp -2286
Clion现在有一个宏可以用来检测IDE:https://youtrack.jetbrains.com/issue/cpp - 1296 #评论= 27 - 1846360
#ifdef __JETBRAINS_IDE__
// Stuff that only clion will see goes here
#endif
这允许你放入定义,以便在它不够聪明的情况下正确地呈现你的代码。
__JETBRAINS_IDE__
宏的值是IDE的版本字符串。特定版本的宏存在于不同的Jetbrains ide: __CLION_IDE__
, __STUDIO_IDE__
(用于Android Studio)和__APPCODE_IDE__
(用于AppCode)。
耶!
使用语法高亮显示:转到设置⇒编辑器⇒Colors&Fonts⇒C/c++并删除"有条件非编译代码"的所有刻度。这样,所有的代码都会以高亮显示的方式显示。
一般情况下任务无解决方案。但是!您可以找到目标和相关的解析上下文,其中定义了SOME_SYMBOL。
…在状态栏中,你可以找到解析上下文选择器,用于在Debug, Release, RelWithDebInfo和MinSizeRel上下文之间切换,以在IDE中解析具有所需定义的代码。