Ogni volta che volevo includere una directory che si trovava al di fuori del mio progetto con Clion, avrei usato il flag -I somedir
. Questa volta, però, quello che voglio fare è di avere una gerarchia simile a questo:Includere le directory in Clion
/project
CMakeLists.txt
/src
/Graph
Graph.h
Graph.cpp
/Dijkstra
Dijkstra.h
Dijstra.cpp
voglio che il mio codice in una directory /src
. E non solo, ma anche, per esempio, all'interno del file Dijkstra.h
Voglio includere Graph.h come questo: #include "Graph/Graph.h
e non così: #include "../Graph/Graph.h
.
Se solo aggiungo una bandiera -I src
, quindi se io sono all'interno del file Dijkstra.h
e ho voluto includere Graph.h
, avrei dovuto scrivere #include "../Graph/Graph.h
, che non è quello che voglio.
Quindi ho provato ad aggiungere anche INCLUDE_DIRECTORIES(src)
. Ciò risolve il problema sopra, tuttavia quando ho provato a compilare, ho ricevuto un errore del linker undefined reference to...
.
Così ho provato ad aggiungere i file uno per uno come questo:
set(SOURCE_FILES
src/Dijkstra/Dijkstra.h
src/Dijkstra/Dijkstra.cpp
src/Graph/Graph.h
src/Graph/Graph.cpp)
add_executable(someprojectname ${SOURCE_FILES})
e che ha riportato il problema precedente, in cui ho dovuto includere i file di questo tipo: #include "../Graph/Graph.h"
.
Come posso farlo correttamente per ottenere il comportamento che voglio?
vorrei suggerire, l'utilizzo di struttura di directory come questo grafico/src/* cpp, Grafico/include/* .h, Dijkstra/src/*. cpp e Dijkstra/include/*. h .. Quindi prova SET (GRAPH_INCLUDE_DIR Graph/include /), SET (DIJKSTRA_INCLUDE_DIR Dijkstra/include /) INCLUDE_DIRECTORIES ($ {GRAPH_INCLUDE_DIR} $ {DIJKSTRA_INCLUDE_DIR}) – Varun
Domanda non chiara. Se usi l'ultima variante e aggiungi 'include_directories (src/Graph src/Dijkstra)' cosa succede? – fghj
Il modo in cui ho suggerito è un modo migliore di strutturare le directory. .cpp in una directory e un file .h in un'altra directory. Perché mescolare questi file in un'unica directory. – Varun