it-swarm.com.de

In CLion: Nur Header-Bibliothek: Datei "gehört nicht zu einem Projektziel, Code Insight-Funktionen funktionieren möglicherweise nicht richtig"

Ich habe ein Header-Only-Bibliotheksprojekt mit dem Befehl cmake eingerichtet:

add_library(my_library INTERFACE)

und ich habe auch hinzugefügt 

target_sources(my_library INTERFACE ${MY_LIRBARY_HEADER_FILES})

wenn ich jedoch eine Quelldatei öffne, erhalte ich die Warnung:

Diese Datei gehört nicht zu einem Projektziel, die Code Insight-Funktionen funktionieren möglicherweise nicht ordnungsgemäß

und ich verliere eine Menge Funktionalität in Sachen Code-Vervollständigung.

Wie kann man dies so einrichten, dass CLion seine üblichen Funktionen für eine reine Header-Bibliothek bereitstellt?

34
xaxxon

Kleiner Hintergrund

Ich hatte das gleiche Problem, obwohl das Projekt nicht nur Header war. Die geöffneten Dateien aus dem inc-Ordner lösten jedoch die zuvor erwähnte Warnung aus, obwohl die CMake-Datei diesen Ordner eindeutig als include_directory bezeichnet hat.

* .hpp-Dateien gehören nicht zu $ ​​{SOURCE}

include_directories("${PROJECT_SOURCE_DIR}/inc/")
add_subdirectory(src)
add_executable(${EXECUTABLE_NAME} main.cpp ${SOURCE})

Da dies eine einwandfreie CMake-Datei ist und das Hinzufügen der Include-Dateien zu den Quelldateien nicht idiomatisch ist, wollte ich die CMake-Datei nicht ändern.

Die Lösung

Wie im offiziellen JetBrains Forum beschrieben, ist die CMake-Datei tatsächlich gültig und die Warnung wird angezeigt, weil CLion die Header-Dateien nicht ordnungsgemäß indizieren kann. Die empfohlene Problemumgehung aus dem Link lautet: Klicken Sie mit der rechten Maustaste auf den Ordner und auf Mark directory as | Library FilesProject Sources and Headers.

Daher ist dieser Header nicht in ausführbaren Dateien enthalten, und CLion informiert Sie, dass einige Code Insight-Funktionen möglicherweise nicht ordnungsgemäß funktionieren. Als Problemumgehung können Sie "Verzeichnis als" Bibliotheksdateien/Projektquelle und Header für Ordner markieren.

57
sjaustirni

Clion bezieht Informationen zu Quelldateien vom CMake-Buildsystem. Wenn Sie eine cpp-Datei zur Quellenliste hinzufügen, informiert CMake automatisch über Header mit demselben Namen. Wenn sich die Namen von cpp/h unterscheiden (oder Sie keine cpp-Datei haben), sollten Sie den Header manuell einfügen. 

set(Sources my_lib.cpp)
set(Headers header_of_my_lib.h)
add_executable(superlib ${Sources} ${Headers})

Wenn Sie keine ausführbare Datei haben, können Sie die letzte Zeile weglassen, CLion kennt jedoch noch Dateien 

1
Valdemar

Sie können die Header-Dateien wie folgt zu Ihrem Projekt hinzufügen:

set(SOURCE_FILES main.cpp MyClass1.cpp MyClass1.h MyClass2.cpp MyClass2.h)

Sie können es auch in mehreren Schritten einstellen:

set(SOURCE_FILES main.cpp)
set(SOURCE_FILES ${SOURCE_FILES} MyClass1.cpp MyClass1.h)
set(SOURCE_FILES ${SOURCE_FILES} MyClass2.cpp MyClass2.h)

Obwohl in den Kommentaren erwähnt, sollten Sie die Header-Dateien wahrscheinlich überhaupt nicht zu Ihrem Projekt hinzufügen.

0
Azurespot