CLion 索引器不解析项目目录中的某些包含

CLion indexer does not resolve some includes in the project directory

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

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

my_src.cpp的第一行是

#include "my_includes/my_own.hpp"

我使用需要这种包含格式的外部构建系统。问题是,如果我在包含 header 中定义的源文件中使用函数,如果我尝试将鼠标悬停在包含

上,CLion 会显示 "Cannot find my_own.hpp"

我尝试将 include 目录标记为包含项目源或 Headers 但这并没有解决问题。有什么想法吗?

这应该是一个基于 CMake 的项目,可以在 CLion 中正确打开。 如果您是 CMake 新手,请查看 CMake 基础教程:https://www.jetbrains.com/help/clion/2016.1/quick-cmake-tutorial.html

您需要创建 CMakeLists.txt 才能让 CLion 开心。声明所有源文件就足够了,您不必将 scons(或任何其他构建系统)转换为 cmake。

你甚至不必手写 CMakeLists.txt,你可以让 CLion 来做:

  • File | New CMake Project from Sources...(自 CLion 2019.2 起)
  • File | Import project ... |(较旧的 CLion)

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

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

由于您的源文件使用包含 #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 导航到构建错误。