在Clion中包含目录

dim*_*s93 6 c++ cmake clion

每当我想在Clion中包含一个位于我项目之外的目录时,我就会使用该-I somedir标志.但是这一次,我想做的是拥有这样的层次结构:

/project
   CMakeLists.txt
   /src
      /Graph
         Graph.h
         Graph.cpp
      /Dijkstra
         Dijkstra.h
         Dijstra.cpp
Run Code Online (Sandbox Code Playgroud)

我想把我的代码放在一个/src目录中.不仅如此,而且,例如,在文件中Dijkstra.h我想要包含Graph.h,就像这样:#include "Graph/Graph.h而不是这样:#include "../Graph/Graph.h.

如果我只添加一个-I src标志,那么如果我在Dijkstra.h文件中并且我想要包含Graph.h,我将不得不写#include "../Graph/Graph.h,这不是我想要的.

所以我也尝试添加INCLUDE_DIRECTORIES(src).这解决了上面的问题,但是当尝试编译时,我收到了一个链接器错误undefined reference to....

所以我尝试逐个添加文件,如下所示:

set(SOURCE_FILES
        src/Dijkstra/Dijkstra.h
        src/Dijkstra/Dijkstra.cpp
        src/Graph/Graph.h
        src/Graph/Graph.cpp)
add_executable(someprojectname ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

这带回了以前的问题,我必须包含这样的文件:#include "../Graph/Graph.h".

我怎样才能正确地做到这一点才能得到我想要的行为?

Tsy*_*rev 6

命令INCLUDE_DIRECTORIES 不添加任何的源文件进行编译!

相反,此命令定义搜索头文件的目录.

在任何情况下,您都需要列出调用中的所有文件add_executable():

include_directories(src)
set(SOURCE_FILES
    src/Dijkstra/Dijkstra.cpp
    src/Graph/Graph.cpp)
add_executable(someprojectname ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)