2016-03-23 28 views
5

我有一个克利翁C++项目,该项目具有以下结构:克利翁索引不能解决一些包括在项目目录

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

my_src.cpp的第一行是

#include "my_includes/my_own.hpp" 

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

我试图将include目录标记为包含Project Source或Headers,但是这并没有解决它。有任何想法吗?

+0

发布您的CMakeLists.txt –

回答

10

您需要为CLion创建一个CMakeLists.txt以获得快乐。声明所有源文件就足够了,您不必将scons(或任何其他构建系统)转换为cmake。

你甚至不需要手工编写CMakeLists.txt,你可以让CLion去做:File | Import project ... |,然后指向包含你项目的目录。

现在编辑生成的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导航到构建错误。

+0

谢谢,那有效! – CPayne

+0

我有类似的问题,include_directories是我需要的。我不得不添加一些不同的,但现在它工作得很好。 – njfife

0

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

+1

因此,即使我不使用CMake作为我的构建版(仅限SCONS),拥有CMake项目是CLion知道在哪里查找某个文件的唯一方法? – CPayne

+0

是的,所以如果我们谈论CLion如何使用CMake,我们只挑几个样本: 1.当代码生成工作时,我们检查编译器中的特性可用性,例如override指令--CLion会建议您这样做只有在编译器与您的CMake中设置的所有选项都支持它的情况下才会打勾。这意味着至少C++ 11,编译器版本当然应该支持它。 2.重命名重构,它检查真正的上下文用法,而不是文本用法。 – nastasiak2512

+0

为了做到这一点,CLion需要知道很多关于您的代码的知识。它取决于很多东西:项目的源文件,包含头文件和头文件搜索路径,编译器标记,使用的工具链和平台,编译器预定义的宏等等。 因此,CLion会分析您的CMake项目模型,将所有这些信息从那里获取,然后将其用于解析,解析和其他功能。 – nastasiak2512