gpt4 book ai didi

CLion 无法解析所有宏

转载 作者:行者123 更新时间:2023-11-30 14:48:17 42 4
gpt4 key购买 nike

我有 5 个文件(+ makefile):

  • hello_city.hhello_world.hhello_world.c:这些文件描述在应用程序中使用的框架。它允许一些根据应用程序的需要进行配置。在文件中,#if#endif 用于选择加入和退出与某些选项相对应的源代码。
  • main.c:代表应用程序
  • conf.h:定义配置标志。

conf.h 通过 makefile 间接包含。

问题是 CLion 可以解析 conf.h 中定义的宏(通过 go to 声明),但它不会考虑将它们突出显示。这意味着带有 #if 的部分始终会折叠并突出显示为注释。您可以在 hello_world.c 中看到该行为。

是否可以以考虑此类声明的方式配置 CLion,或者至少禁用折叠和“注释”突出显示?请记住,不可能摆脱 makefile,因为它是一个具有复杂设置的庞大项目。 ( original source )

可以在此处找到简化示例的源文件:https://gist.github.com/Benedikt1992/05d01948ed1638e656b1dfbad244337c

更新:基本问题的简化和澄清

最佳答案

如果你刚才这么说...

The conf.h is indirectly included via the 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 中指定的编译器命令行选项定义。

无论如何,你问:

The problem is that CLion can resolv the macros defined in conf.h (via go to declaration) but it doesn't consider them for highlightning.

我认为您想说的是,在包含 hello_world.h 的文件中,CLion 的代码突出显示机制无法识别指定文件中的任何声明(特别是宏定义),通过Makefile,由 PROJECT_CONF_H 编写。

Which means the parts with #if are always collapsed and highlighted as comments. You can see that behaviour within hello_world.c.

Is it possible to configure CLion in a way that it considers such declarations or at least to disable the collapsing and 'comment'-highlightning?

尽管 CLion 很可能可以配置为禁用由预处理器条件抑制的折叠代码段,但很难将此问题归咎于 CLion。它很可能只分析您的源文件,而不是您的 Makefile,因此就其而言,您的配置头确实从未包含在内。它知道 header 在那里,因此其中的符号位于其索引中,但仅此而已。

我观察到,像现在这样的代码结构非常不寻常。具体来说,通过头文件提供构建时配置数据的构建系统通常确保 header 始终存在且具有相同的名称,并通过在预构建配置中根据需要设置其内容来进行操作步骤(或要求人员手动执行此操作)。

Keep in mind it is not possible to get rid of the makefile since it's a huge project with a complex setup.

make 是一个很棒的工具。没有理由想要转储 make 或 Makefile。但您非常应该考虑改变它的这方面的工作方式。

关于CLion 无法解析所有宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50516463/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com