Различные инструменты завершения на основе кланов (например, youcompleteme) должны быть проинформированы о том, какие компиляторные флаги должны скомпилировать источник. Было бы неплохо, если бы параметры компилятора были использованы из файлов проекта. Что было бы самым простым способом извлечь флаги (автоматически, а не вручную) из проектов cmake или сгенерированного результата в формате make или ninja?Команда компилятора извлечения от cmake
ответ
Ninja действительно способен распечатывать команды для создания цели или конкретной цели. И это очень быстро. Как и на моей машине в 0.033s для 1122 команд. Он может печатать их как в командах оболочки, так и в базе данных компиляции, а ycm имеет служебную программу для использования базы данных компиляции.
Важно отметить, что для инструмента ниндзя compdb
требуется имя правила в качестве аргумента. Это, похоже, не упоминается в документации.
Самый простой, как правило, сделать что-то по существу 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.
См http://clang.llvm.org/docs/LibTooling.html
Set CMAKE_EXPORT_COMPILE_COMMANDS = ON.
- 1. CMAKE набор флагов компилятора rc?
- 2. Идентификация компилятора CMake C
- 3. cmake проверить наличие компилятора
- 4. Неизвестная команда CMake ADD_TESH_FACTORIES
- 5. команда CMake не распознается
- 6. Неизвестная команда CMake «slicerMacroBuildScriptedModule»
- 7. Неизвестная команда Cmake «add_llvm_tool»
- 8. Неизвестная команда CMake «ExternalProject_Add»
- 9. Неизвестная команда CMake Qt5
- 10. CMake переопределять собственные флаги компилятора
- 11. CMake Error: Unknown команда CMake «ocv_glob_modules» «
- 12. CMake ошибка компиляции .. (Неизвестная команда CMake «QT4_WRAP_UI»)
- 13. cmake: флаг компилятора для всех типов сборки
- 14. CMake обнаружить, если нет компилятора C++, присутствующего
- 15. Команда cmake для проверки библиотек?
- 16. source_group Команда CMake не работает
- 17. команда CMake/CPack для InstallDirRegKey
- 18. Ошибки Cmake: идентификатор компилятора CXX неизвестен, идентификатор компилятора C неизвестен
- 19. на каждый параметр компилятора cuda с cmake
- 20. Как добавить аргументы компилятора с помощью CMake?
- 21. Установить параметр компилятора по умолчанию В CMake
- 22. Параметры CMAKE для аргументов компилятора -DXXX
- 23. CMake с использованием 32 или 64 компилятора
- 24. Добавление флагов компилятора в файл с CMake
- 25. cmake flags только для теста компилятора
- 26. Передать параметры компилятора с использованием cmake
- 27. Получение компилятора для создания созданного Cmake файла
- 28. Cmake не работает. C сбой компилятора
- 29. с использованием настраиваемого флага компилятора в cmake?
- 30. Команда для извлечения информации столбца
Вы обновили конфигурацию 'youcompleteme', чтобы использовать файл' compile_commands.json', созданный CMake? Это работает очень хорошо. –