2015-09-03 22 views
11

W moim projekcie znajduje się plik zamknięte w dyrektywie ifdef preprocesoraDefiniowanie symboli preprocesora dla analizatora Clion

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

SOME_SYMBOL jest zdefiniowany przez inny plik, który jest skompilowany przed tym jednym, a kod działa zgodnie z oczekiwaniami, ale statyczne analizator nie jest świadomy tego symbolu i dlatego traktuje SOME_SYMBOL jako niezdefiniowany. Cały plik nie ma podświetlanych składni, a niektóre analizy są po prostu pomijane (np. Podświetlanie składni).

Czy istnieje sposób na poinformowanie analizatora, aby traktował ten symbol zgodnie z definicją bez definiowania go w CMakeLists.txt?

Nie mam opcji definiowania SOME_SYMBOL w CMakeLists.txt, ponieważ projekt zależy od tego, czy jest niezdefiniowany w niektórych ścieżkach kompilacji (zmiana jest prawie niemożliwa).

Aktualizacja:
Wygląda na to, że obecnie jest to otwarty problem z JetBrains. Zobacz Issue CPP-2286

+1

Istnieje szansa, że ​​trzeba znaleźć odpowiedni kontekst włączenia dla pliku. Jeśli masz widoczny pasek stanu, możesz zobaczyć listę rozwijaną "Kontekst:" w prawym dolnym rogu. Po prostu spróbuj. – uta

Odpowiedz

1

Aby uzyskać podświetlanie składni: przejść do ustawień ⇒ ⇒ Editor Kolory & Fonts ⇒ C/C++ i usunąć wszystkie kleszcze do „kodu Warunkowo nieskompilowanych”. W ten sposób cały kod pojawi się przy zwykłym podświetlaniu.

+0

Dzięki, ale nie mogę znaleźć żadnego pola wyboru z napisem przypominającym "Niezupełnie skompilowany kod". – Neowizard

+0

Dzięki, to działa - po prostu nie jest wyświetlane w podglądzie, a podświetlenie jest przywracane dla tych bloków. – Stecman

1

Clion teraz ma makro, które można wykorzystać do wykrywania IDE: https://youtrack.jetbrains.com/issue/CPP-1296#comment=27-1846360

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

ta pozwala umieścić w definiuje aby Clion renderowania kodu odpowiednio w przypadkach, gdy nie może być wystarczająco sprytny, aby to rozgryźć.

Wartość makra __JETBRAINS_IDE__ to ciąg wersji dla IDE. Konkretne wersje makr istnieją dla różnych IDE Jetbrains: __CLION_IDE__, __STUDIO_IDE__ (dla Android Studio) i __APPCODE_IDE__ (dla AppCode).

Yay!

Uwaga: W chwili pisania artykułu jest to dostępne tylko w najnowszym EAP CLION.