我有5个文件(+ makefile):
hello_city.h
,hello_world.h
,hello_world.c
:这些文件描述了
应用程序中使用的框架。它允许一些
基于应用程序需求的配置。文件#if
和#endif
用于选择加入和输出与某些选项对应的源代码。main.c
:代表应用conf.h
:定义配置标志。 conf.h
通过makefile
间接包含conf.h
。
问题是CLion可以解析#if
中定义的宏(通过转到声明),但它不会将它们视为突出显示。这意味着具有hello_world.c
的部分始终会折叠并突出显示为注释。您可以在makefile
。
是否可以以考虑此类声明的方式配置CLion,或至少禁用折叠和评论' -highlightning?
请记住,不可能摆脱PreferenceFragment
,因为它是一个复杂设置的庞大项目。 (original source)
可以在此处找到简化示例的源文件:https://gist.github.com/Benedikt1992/05d01948ed1638e656b1dfbad244337c
更新:简化和澄清基本问题
答案 0 :(得分:1)
如果你刚才这么说......
conf.h通过makefile间接包含在内。
......首先,我们可能已经节省了很多时间。然而,为了澄清我所谈论的内容,因为您忘记将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中定义的宏(通过 去声明)但它并没有考虑突出显示。
我认为您试图在包含hello_world.h
的文件中说,CLion的代码突出显示机制无法识别来自命名文件的任何声明(特别是宏定义),通过Makefile,PROJECT_CONF_H
。
这意味着带#if的部分总是折叠并突出显示为 评论。你可以在hello_world.c中看到这种行为。
是否可以以其认为的方式配置CLion 声明或至少禁用折叠和 &#39;评价&#39;?-highlightning
尽管很可能CLion可以配置为禁用由预处理器条件抑制的折叠代码段,但很难将这个问题归咎于CLion。很可能它只分析你的源文件,而不是你的Makefile,所以就它而言,你的配置标题确实从未包括在内。它知道标题是那里,所以其中的符号在其索引中,但那就是它。
我在这一点上观察到诸如present之类的代码结构非常不寻常。具体而言,通过头文件提供构建时配置数据的构建系统通常确保头始终存在,具有相同的名称,并通过在预构建配置中根据需要设置其内容来进行操作步骤(或要求一个人手动完成)。
请记住,不可能摆脱它 makefile因为它是一个复杂设置的巨大项目。
make
是一个了不起的工具。没有理由要转储make
或Makefile。但是你应该考虑改变这方面的工作方式。