CLion索引程序无法解析项目目录中的某些包含文件

14

我有一个 CLion C++ 项目,它具有以下结构:

    project
       ---->my_includes
       |   ----> my_own.hpp
       ---->source
           ----> my_app
               ----> my_src.cpp

我_src.cpp的第一行是

#include "my_includes/my_own.hpp"

我使用一个外部构建系统,需要这种包含格式。问题是,如果我在源文件中使用头文件中定义的函数,CLion将在我尝试悬停包含文件时显示“找不到my_own.hpp”。

我尝试将包含目录标记为包含项目源或头文件,但这没有解决问题。有什么建议吗?


请发布您的CMakeLists.txt文件。 - Tamás Szelei
3个回答

30
你需要创建一个 CMakeLists.txt 让 CLion 知道你的项目结构。你只需要声明所有源文件,不必将 scons(或其他任何构建系统)转换为 cmake。

你甚至不需要手动编写 CMakeLists.txt,可以让 CLion 为你生成:

  • File | New CMake Project from Sources... (since CLion 2019.2)
  • File | Import project ... | (older CLion)

然后指向包含你的项目的目录。

现在编辑生成的 CMakeLists.txt 并添加一个 cmake 命令来告诉 CLion 在哪里找到包含文件(实际上是告诉编译器,CLion 将重用该信息)。

因为你的源文件使用的 include 是 #include "my_includes/my_own.hpp",你需要告诉 cmake 包含目录 my_includes 的基本目录:

include_directories(.)

点号表示与包含 CMakeLists.txt 文件的目录相同的目录。

我使用一个复制你布局的项目进行测试,从 my_src.cpp 我可以导航到 my_own.hpp

然后构建仍需在终端中使用 scons。还可以添加一个 cmake 命令 add_custom_target(),它会调用你的 scons(或 make 等),这样你也可以从 CLion 导航到构建错误。


我曾经遇到过类似的问题,include_directories是我所需要的。我不得不添加一些不同的目录,但现在它运行得非常好。 - njfife
1
从CLion 2019.2起,此选项称为“文件|从源创建新的CMake项目...”。 - ikamen
可能需要构建才能同步和识别所包含的目录。只有在构建后,我才能浏览到那些头文件。 - Ilia Barahovsky

1

对于MakeFile + gcc (g++)项目,您可以添加标志-I /Dir/To/Your/Project

如果在重新编译make文件后CLion仍然显示#include错误,请删除.idea文件夹并重新启动CLion。


0

1
所以即使我没有使用CMake进行构建(只用SCONS),拥有一个CMake项目是CLion知道在哪里查找某些文件的唯一方法? - CPayne
是的,所以如果我们谈论CLion如何使用CMake,让我们只选取一些示例:
  1. 当代码生成正在运行时,我们会在编译器中检查功能的可用性,例如重写指令-CLion只会在编译器支持它的情况下建议你选择这个选项,当然还要考虑您在CMake中设置的所有选项。这意味着至少需要C++11,并且编译器版本当然也应该支持它。
  2. 重命名重构会检查实际上下文使用情况,而不是文本使用情况。
- nastasiak2512
为了能够做到这一点,CLion需要了解您的代码很多信息。这取决于许多因素:项目的源文件、包含的头文件和头文件搜索路径、编译器标志、工具链和平台使用、编译器预定义宏等等。因此,CLion分析您的CMake项目模型以获取所有这些信息,然后将其用于解析、解决和其他功能。 - nastasiak2512

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接