2016-03-23 22 views
5

Ho un Clion progetto C++ che ha la seguente struttura:Clion indicizzatore non risolvere alcuni include nella directory del progetto

project 
     ---->my_includes 
     | ----> my_own.hpp 
     ---->source 
      ----> my_app 
       ----> my_src.cpp 

La prima linea di my_src.cpp è

#include "my_includes/my_own.hpp" 

io uso un sistema di build esterno che richiede questo formato di inclusione. Il problema è che se utilizzo una funzione nel mio file sorgente definito nell'intestazione inclusa, CLion dice "Impossibile trovare my_own.hpp" se provo a passare il mouse sopra l'inclusione.

Ho provato a contrassegnare la directory include come contenente Project Source o Headers ma questo non è stato risolto. Qualche idea?

+0

Pubblica il tuo CMakeLists.txt –

risposta

10

Per CLion è necessario creare un valore per. È sufficiente dichiarare tutti i file sorgente, non è necessario convertire i propri scons (o qualsiasi altro sistema di compilazione) in cmake.

Non è nemmeno necessario scrivere a mano il file CMakeList.txt, è possibile chiedere a CLion di farlo: File | Import project ... | e quindi puntare alla directory contenente il progetto.

Ora modifica lo CMakeLists.txt generato e aggiungi un comando cmake per dire a CLion dove trovare gli include (in realtà per dire al compilatore, e CLion riutilizzerà tali informazioni).

Dal momento che i file di origine utilizzano l'inclusione come #include "my_includes/my_own.hpp", dovete dire cmake nella directory base contenente directory my_includes:

include_directories(.) 

dove il punto indica la stessa directory di quello contenente il CMakeLists.txt.

Ho provato con un progetto che riproduce il layout e da my_src.cpp posso navigare a my_own.hpp.

Quindi per costruire devi ancora usare scons in una console. È anche possibile aggiungere un comando cmake, add_custom_target() che chiamerà i tuoi scons (o la tua marca, o qualsiasi altra cosa), in modo che tu possa anche navigare da CLion agli errori di compilazione.

+0

Grazie, funziona! – CPayne

+0

Ho avuto un problema simile, include_directories era quello di cui avevo bisogno. Ho dovuto aggiungerne di diversi, ma ora funziona alla grande. – njfife

0

Questo dovrebbe essere un progetto basato su CMake da aprire correttamente in CLion. Controllare il tutorial di base di CMake se non si è nuovi a CMake: https://www.jetbrains.com/help/clion/2016.1/quick-cmake-tutorial.html

+1

Quindi, anche se non sto usando CMake per la mia build (solo SCONS), avere un progetto CMake è l'unico modo in cui CLion saprà dove cercare determinati file? – CPayne

+0

Sì, quindi se parliamo di come CLion usa CMake, prendiamo solo un paio di campioni: 1. Quando la generazione del codice funziona, controlliamo la disponibilità delle funzioni nel compilatore, come la direttiva di sovrascrizione - CLion ti suggerirà questo spuntare solo nel caso in cui il compilatore, con tutte le opzioni impostate nel CMake, lo supporti. Ciò significa almeno C++ 11, e ovviamente la versione del compilatore dovrebbe supportarlo. 2. Rinomina refactoring, controlla gli usi del contesto reale, non gli usi del testo. – nastasiak2512

+0

Per essere in grado di farlo, CLion ha bisogno di sapere molto sul tuo codice. E dipende da molte cose: i file di origine del progetto, le intestazioni incluse e i percorsi di ricerca delle intestazioni, i flag del compilatore, la toolchain e la piattaforma utilizzate, i macro predefiniti del compilatore e altro ancora. Quindi, CLion analizza il modello di progetto CMake per ricavare tutte queste informazioni da lì e quindi utilizzarle per l'analisi, la risoluzione e altre funzionalità. – nastasiak2512

Problemi correlati