2014-01-28 5 views
1

Различные инструменты завершения на основе кланов (например, youcompleteme) должны быть проинформированы о том, какие компиляторные флаги должны скомпилировать источник. Было бы неплохо, если бы параметры компилятора были использованы из файлов проекта. Что было бы самым простым способом извлечь флаги (автоматически, а не вручную) из проектов cmake или сгенерированного результата в формате make или ninja?Команда компилятора извлечения от cmake

+0

Вы обновили конфигурацию 'youcompleteme', чтобы использовать файл' compile_commands.json', созданный CMake? Это работает очень хорошо. –

ответ

2

Ninja действительно способен распечатывать команды для создания цели или конкретной цели. И это очень быстро. Как и на моей машине в 0.033s для 1122 команд. Он может печатать их как в командах оболочки, так и в базе данных компиляции, а ycm имеет служебную программу для использования базы данных компиляции.

Важно отметить, что для инструмента ниндзя compdb требуется имя правила в качестве аргумента. Это, похоже, не упоминается в документации.

1

Самый простой, как правило, сделать что-то по существу CC=echo CXX=echo make и извлечь из него аргументы.

Существует уже реализация этого в плагине clang_complete, см. Скрипт cc_args.py по адресу https://github.com/Rip-Rip/clang_complete/blob/master/bin/cc_args.py и задокументирована в https://github.com/Rip-Rip/clang_complete/blob/master/doc/clang_complete.txt для получения дополнительной информации. Если я не ошибаюсь, YCM может читать файлы .clang_complete.

Например, в clang_complete вы запустите его как make CC='~/.vim/bin/cc_args.py gcc' CXX='~/.vim/bin/cc_args.py g++' -B

Я не был бы удивлен, если YCM был подобный механизм уже имеющийся из коробки.

[EDIT] Да, он имеет, см. https://github.com/Valloric/YouCompleteMe#c-family-semantic-completion-engine-usage и базу данных «Clang's CompilationDatabase» из документации YCM. В принципе, либо они создали файл с флагами компиляции для YCM для использования, либо clang генерируют базу данных компиляции и используют YCM.

Смежные вопросы