]> Sergey Matveev's repositories - stargrave-blog.git/commit
Научил clangd работе со своим кодом
authorSergey Matveev <stargrave@stargrave.org>
Tue, 14 Jul 2020 08:59:03 +0000 (11:59 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 14 Jul 2020 08:59:03 +0000 (11:59 +0300)
commitc5ccb1d06337fd527868c79ab391bf1a0ae3926c
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent3498b4ea4a2699d9d43f3947166366d58a0aa1d2
Научил clangd работе со своим кодом

clangd выполняет роль LSP сервера для C* кода. Никакой настройки не
требуется: он уже будет многое отрабатывать без проблем. Однако, если
есть специфичные пути для include-ов, о которых он ничего не знает, то
он будет выдавать warning-и на неизвестные ему вещи. Я видел что
упоминался compile_commands.json -- в нём задаются все опции компиляции
каждого исходного файла. CMake подобные файлы может делать
самостоятельно, но я его не использую. Делать руками у меня получалось,
но как-то не хочется руками вести redo- (прежде Make) based систему
сборки и ещё этот compile_commands.json. Но никто не запрещает это
автоматизировать конечно же. В https://clang.llvm.org/docs/JSONCompilationDatabase.html
есть упоминание compile_flags.txt в котором просто перечисляются флаги
компиляции общие для всех файлов. Вот такой redo целью в своём C проекте
его создаю:

    % cat compile_flags.txt.do
    redo-ifchange ../cc
    . ../cc
    echo "$PCSC_CFLAGS $TASN1_CFLAGS $CRYPTO_CFLAGS $CFLAGS -I$INCDIR" |
        tr " " "\n" | sed "/^$/d" | sort | uniq

И теперь clangd знает обо всех зависимостях, даже установленных не в
системных директориях. Для моего подобного решения хватает и оно
достаточно простое.