Ich habe früher mit VSCode gearbeitet C/C++ Verlängerung. In dieser Erweiterung (in einer JSON-Datei) gab es eine Funktion namens „includePath“, mit der ich die Pfade für meine Header festlegen konnte. Ohne die Ausführung von CMake oder make hätte ich also den Vorschlag für meine Header und die Codevervollständigung daraus .
Jetzt bin ich zur Codevervollständigung auf neovim und clangd als Sprachserver umgestiegen. Ich habe viel gesucht, um die entsprechende Funktion in den Clangd-Optionen zu finden, konnte aber nichts weiter finden als dieser Link.
Da Clangd ein leistungsstarker Sprachserver ist, frage ich mich, ob er nicht über eine solche Funktion verfügt. Ich möchte also wissen, ob es in Clangd tatsächlich eine solche Funktion gibt. und wenn JA, wie kann ich das nutzen?
Hinweis: Ich verwende einen Sprachclient namens „coc-clangd“. Ich weiß nicht, ob es wichtig ist oder nicht.
Ich weiß, dass. Aber ich verwende catkin_make (ROS-Plattform), das automatisch CMake-Dateien generiert, und dann erstelle ich darauf basierende Datei „compile_commands.json“. Wenn ich den Prozess also automatisieren möchte, kann ich diese Datei dafür nicht verwenden.
– AMIR REZA SADEQI
14. April 2020 um 12:33 Uhr
Clangd verwendet compile_commands.json Datenbankdatei, die Flags (z. B. Include-Verzeichnisse) für jede Datei im Projekt enthält. Diese Datei wird jedoch automatisch generiert, sodass alle daran vorgenommenen Änderungen irgendwann überschrieben werden. Sie können CMake bitten, beliebige benutzerdefinierte Kompilierungsflags hinzuzufügen -DCMAKE_CXX_FLAGS Befehlszeilenargument.
Danach sollten neue Flaggen in Ihrem erscheinen compile_commands.json Datei.
Zu Ihrer Information, wenn Sie etwas generieren müssen compile_commands.json Sie können verwenden bear -- make um es zu generieren.
– Alex
18. August 2022 um 18:47 Uhr
Das hat bei mir funktioniert, ich hatte ein ähnliches Problem, aber mit Standardbibliotheken wie #include <iostream>Ich hatte Schwierigkeiten zu wissen, welche Pfade ich für Systemheader verwenden sollte. Ich habe dies ausgeführt, um die Include-Pfade zu erfahren gcc -H mySrcFile.cppso führe ich CMake jetzt aus mkdir -pv $BUILD_DIR && cd $BUILD_DIR && cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCMAKE_CXX_FLAGS="-isystem /usr/include/c++/11/ -isystem /usr/include/x86_64-linux-gnu/c++/11/" && make run
Erstellen Sie eine Datei mit dem Namen „.clangd“ auf der obersten Ebene des Quellverzeichnisses. Fügen Sie diese Inhalte hinzu.
CompileFlags: # Tweak the parse settings
Add:
- "-I=[folder]"
Aber ich denke, das ist nicht zu empfehlen, alle Include-Verzeichnisse sollten hinzugefügt werden CMakeLists.txt Datei.
Hinweis: Wenn Sie clangd in Visual Studio Code verwenden, müssen Sie hinzufügen --enable-config Zu Clangd: Arguments in den VS-Code-Einstellungen, damit die .clangd-Datei verwendet werden kann Quelle. Das habe ich auch gefunden "-I=path/to/dir" hat aber nicht funktioniert "--include-directory=path/to/dir" funktionierte.
– Gabriel Devillers
12. März 2022 um 16:17 Uhr
@hideDragon Ich gehe davon aus, dass alle Verzeichnisse enthalten, die Sie hinzufügen CMakeLists.txt Datei befinden sich dann auch innerhalb der compile_commands.json. Aber! Ich denke, dass du etwas erschaffen solltest .clangd Datei trotzdem! Dies liegt daran, dass Sie in dieser Konfigurationsdatei zuerst Punkt Die clangd zum compile_commands.json mit dem Befehl CompileFlags: und es ist Mitglied CompilationDatabase: ./build(wenn dein compile_commands.json ist im Inneren build Unterordner Ihres Projekts) (Verknüpfung) und von da an kann es selbstständig funktionieren …
– 71GA
9. März um 13:09
Du kannst hinzufügen includePath Zu clangd.fallbackFlags in vscode’s settings.json so was:
Um die von Clangd bereitgestellte Codevervollständigung zu verwenden, lassen Sie Clangd Include-Pfade von abrufen compiler_commands.json mit Compiler-Aufrufen, die von CMake verwendet werden. Stellen Sie die ein CMAKE_EXPORT_COMPILE_COMMANDS Option in CMakeLists.txtes wird ausgegeben compiler_commands.json in das Build-Verzeichnis, wenn CMake ausgeführt wird:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
Kopieren Sie das generierte compiler_commands.json in das Quellverzeichnis des Projekts. Clangd wird diese Datei nun als Quelle verwenden.
14535100cookie-checkGibt es in clangd die Option „includePath“?yes
Sie müssen bereitstellen
compiler_commands.json
sehen: clangd.llvm.org/installation.html– HolyBlackCat
14. April 2020 um 11:41 Uhr
Ich weiß, dass. Aber ich verwende catkin_make (ROS-Plattform), das automatisch CMake-Dateien generiert, und dann erstelle ich darauf basierende Datei „compile_commands.json“. Wenn ich den Prozess also automatisieren möchte, kann ich diese Datei dafür nicht verwenden.
– AMIR REZA SADEQI
14. April 2020 um 12:33 Uhr