每当我想包含一个位于我的项目之外的目录与Clion时,我将使用-I somedir
标志。而这一次,我想要做的就是有这样的层次结构:在Clion中包含目录
/project
CMakeLists.txt
/src
/Graph
Graph.h
Graph.cpp
/Dijkstra
Dijkstra.h
Dijstra.cpp
我想我在/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})
,并勾起以前的问题,在这里我必须包括像这样的文件:#include "../Graph/Graph.h"
。
我该怎么做才能得到我想要的行为?
我建议,您使用的目录结构类似这样的图形/ src目录/ * CPP,图形/包括/ * .h,Dijkstra/src/*。cpp和Dijkstra/include/*。h ..然后尝试SET(GRAPH_INCLUDE_DIR Graph/include /),SET(DIJKSTRA_INCLUDE_DIR Dijkstra/include /)INCLUDE_DIRECTORIES($ {GRAPH_INCLUDE_DIR} $ {DIJKSTRA_INCLUDE_DIR}) – Varun
根本不清楚问题。如果使用最后一个变体并添加'include_directories(src/Graph src/Dijkstra)'会发生什么? – fghj
我建议的方式是制作目录结构的更好方法。 .cpp放在一个目录中,而.h文件放在另一个目录中。为什么要在单个目录中混合这些文件。 – Varun