Ilekroć chciałam dołączyć do katalogu, który był poza moim projektem z Clion, użyłbym flagi -I somedir
. Tym razem jednak, co chcę zrobić, to mieć hierarchię tak:W tym katalogi w Clion
/project
CMakeLists.txt
/src
/Graph
Graph.h
Graph.cpp
/Dijkstra
Dijkstra.h
Dijstra.cpp
chcę mojego kodu w katalogu /src
. I nie tylko to, ale także, na przykład, w pliku Dijkstra.h
Chcę dołączyć Graph.h w ten sposób: #include "Graph/Graph.h
, a nie w ten sposób: #include "../Graph/Graph.h
.
Gdybym tylko dodać -I src
flagę, a następnie, jeśli jestem wewnątrz pliku Dijkstra.h
i chciałem to Graph.h
, chciałbym napisać #include "../Graph/Graph.h
, który nie jest to, co chcę.
Więc starałem się również dodać INCLUDE_DIRECTORIES(src)
. To naprawiło powyższy problem, jednak gdy próbowałem go skompilować, otrzymałem błąd linkera undefined reference to...
.
Więc próbowałem dodawanie plików jeden po drugim tak:
set(SOURCE_FILES
src/Dijkstra/Dijkstra.h
src/Dijkstra/Dijkstra.cpp
src/Graph/Graph.h
src/Graph/Graph.cpp)
add_executable(someprojectname ${SOURCE_FILES})
i przywrócił poprzednią problem, gdzie musiałem dołączyć pliki w ten sposób: #include "../Graph/Graph.h"
.
Jak zrobić to poprawnie, aby uzyskać pożądane zachowanie?
i sugeruje, aby korzystać strukturę katalogów jak ten wykres/src/* CPP, Graph/include/* .h, Dijkstra/src/*. cpp i Dijkstra/include/*. h .. Następnie spróbuj SET (GRAPH_INCLUDE_DIR Graph/include /), SET (DIJKSTRA_INCLUDE_DIR Dijkstra/include /) INCLUDE_DIRECTORIES ($ {GRAPH_INCLUDE_DIR} $ {DIJKSTRA_INCLUDE_DIR}) – Varun
Brak jasnego pytania. Jeśli używasz ostatniego wariantu i dodajesz 'include_directories (src/Graph src/Dijkstra)' co się dzieje? – fghj
Sposób, w jaki zasugerowałem, jest lepszym sposobem tworzenia struktury katalogów. .cpp w jednym katalogu i .h w innym katalogu. Dlaczego mieszać te pliki w jednym katalogu. – Varun