2015-09-03 34 views
11

Nel mio progetto c'è un file allegato in una direttiva ifdef preprocessoreDefinizione di simboli del preprocessore per analizzatore Clion

#ifdef SOME_SYMBOL 
... entire file ... 
#endif 

SOME_SYMBOL è definito da un altro file che è stato compilato prima di questo, e il codice funziona come previsto, ma il statici l'analizzatore non è a conoscenza di questo simbolo e pertanto tratta SOME_SYMBOL non definito. L'intero file non ha evidenziazione della sintassi e parte dell'analisi viene saltata (ad esempio l'evidenziazione dell'errore di sintassi).

C'è un modo per dire all'analizzatore di trattare questo simbolo come definito senza definirlo in CMakeLists.txt?

Non ho la possibilità di definire SOME_SYMBOL in CMakeLists.txt poiché il progetto dipende dal fatto che non è definito in alcuni percorsi di compilazione (cambiando questo sarebbe quasi impossibile).

Aggiornamento:
Sembra che questo sia attualmente un problema aperto con JetBrains. Vedi Issue CPP-2286

+1

È possibile che sia necessario trovare il contesto di inclusione adatto per il file. Se hai una barra di stato visibile, puoi vedere l'elenco a discesa "Contesto:" nell'angolo in basso a destra. Provaci un po '. – uta

risposta

1

Per ottenere l'evidenziazione della sintassi: Andare su Impostazioni ⇒ Editor ⇒ Colori & Fonts ⇒ C/C++ e rimuovere tutte le zecche per 'codice condizionale non compilato'. In questo modo tutto il codice apparirà con la solita evidenziazione.

+0

Grazie, ma non riesco a trovare alcuna casella di controllo con una didascalia simile a "Codice non compilato in modo condizionale". – Neowizard

+0

Grazie, funziona - non è solo visualizzato nell'anteprima che l'evidenziazione viene ripristinata per questi blocchi. – Stecman

1

Clion ha ora una macro che è possibile utilizzare per rilevare l'IDE: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360

#ifdef __JETBRAINS_IDE__ 
    // Stuff that only clion will see goes here 
#endif 

Questo consente di mettere in definisce per rendere Clion rendere il codice correttamente nei casi in cui non può essere abbastanza intelligente da capirlo.

Il valore della macro __JETBRAINS_IDE__ è una stringa di versione per l'IDE. Esistono versioni specifiche della macro per IDE Jetbrains diversi: __CLION_IDE__, __STUDIO_IDE__ (per Android Studio) e __APPCODE_IDE__ (per AppCode).

Yay!

Nota: al momento della scrittura, questo è disponibile solo nell'ultimo CLAP EAP.