【发布时间】:2016-08-21 12:30:05
【问题描述】:
每当我想在 Clion 中包含位于我的项目之外的目录时,我都会使用 -I somedir 标志。然而这一次,我想做的是有这样的层次结构:
/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"。
我怎样才能正确地做到这一点以获得我想要的行为?
【问题讨论】:
-
我建议你使用像这样的目录结构 Graph/src/*.cpp , Graph/include/*.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 })
-
根本不清楚问题。如果您使用最后一个变体并添加
include_directories(src/Graph src/Dijkstra)会发生什么? -
我建议的方法是制作目录结构的更好方法。 .cpp 在一个目录中,.h 文件在另一个目录中。为什么要将这些文件混合在单个目录中。