Ninja: Запрос функции: более гибкое сопоставление имен правил в инструменте compdb

Созданный на 20 сент. 2015  ·  12Комментарии  ·  Источник: ninja-build/ninja

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

В частности, в версии 3.2 (я думаю) генератор ниндзя CMake начал генерировать правила вида <lang>_COMPILER__<directory> . Это означает, что для запроса базы данных компиляции вам необходимо сначала просканировать дерево каталогов проекта или прибегнуть к другим хитростям. CMake до 3.2 генерирует правила в форме <lang>_COMPILER которые позволяли запрашивать их из общих инструментов - без специальных знаний о проекте.

Следовательно, этот запрос функции предназначен для более гибкого сопоставления имен правил с аргументами командной строки. Минимально полезная реализация допускала бы сопоставление только по префиксу. В качестве альтернативы также было бы полезно сопоставление регулярных выражений.

Самый полезный комментарий

Я нахожу инструмент compdb довольно сложным в использовании - для меня удивительно, что ему нужен список правил (мне потребовалось некоторое время, пока я не понял этого). Может быть, если явно не переданы никакие явные правила, это может означать просто «все правила»? Этого будет достаточно для сборок на основе cmake?

(Не связано: я думаю, вы можете передать CMAKE_EXPORT_COMPILE_COMMANDS в cmake, чтобы он напрямую записывал базу данных компиляции.)

Все 12 Комментарий

Раньше существовал инструмент «правила» (7b67e48a1479c6fc7326c55756088bd57d64fc82), который мог распечатать список всех правил. С помощью этого инструмента мы могли бы сделать что-то вроде этого:

ninja -t compdb `ninja -t rules | grep 'CXX_COMPILER_'`

Я думаю, что было бы неплохо воскресить этот инструмент, поскольку он также может помочь в написании сценария завершения оболочки. Я постараюсь сделать это в ближайшие дни.

Это тоже сработает, спасибо.

Я нахожу инструмент compdb довольно сложным в использовании - для меня удивительно, что ему нужен список правил (мне потребовалось некоторое время, пока я не понял этого). Может быть, если явно не переданы никакие явные правила, это может означать просто «все правила»? Этого будет достаточно для сборок на основе cmake?

(Не связано: я думаю, вы можете передать CMAKE_EXPORT_COMPILE_COMMANDS в cmake, чтобы он напрямую записывал базу данных компиляции.)

Здесь есть кто-нибудь? 🙂

инструмент правил кажется удаленным из сборки?

Это было бы действительно полезно.

Мне нравится предложение @nico просто распечатать все правила по умолчанию. В будущем при необходимости может быть добавлено что-то более сложное (например, сопоставление подстановочных знаков).

Я отмечаю, что предлагаемые здесь обходные пути @sarcasm довольно уродливы, мотивируя более красивое решение в самом ниндзя :)

Теперь есть # 1377 для сброса всех правил по умолчанию.

Хотел добавить здесь небольшую заметку, похоже, что для некоторых проектов CMake [0] ninja -t compdb (без аргументов) ничего не выгружает (вывод - пустой список [] ).

cmake -G Ninja .
ninja -t compdb
[
]

Однако использование CMAKE_EXPORT_COMPILE_COMMANDS как предложил Нико, будет:

cmake -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ninja -t compdb
[
]

ninja -t compdb прежнему возвращает пустое значение, но compile_commands.json уже сгенерирован.

Спасибо, Нико!

[0] для Binaryen не менее

Что говорит ninja --version ?

1.8.2, кстати, этот ниндзя идет от depot_tools

В этой версии отсутствует # 1377.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги