Ninja: Solicitação de recurso: correspondência de nome de regra mais flexível na ferramenta compdb

Criado em 20 set. 2015  ·  12Comentários  ·  Fonte: ninja-build/ninja

Atualmente, para usar a ferramenta compdb, você precisa saber o nome exato das regras que deseja consultar. Isso funciona bem, desde que esses nomes sejam previsíveis, mas não necessariamente o caso para alguns geradores.

Mais notavelmente, na versão 3.2 (eu acho) o gerador ninja do CMake começou a gerar regras da forma <lang>_COMPILER__<directory> . Isso significa que, para consultar o banco de dados de compilação, você precisa primeiro examinar a árvore de diretórios do projeto ou recorrer a outros hacks. O CMake anterior ao 3.2 gera regras no formato <lang>_COMPILER que possibilita a consulta a partir de ferramentas genéricas - sem conhecimento específico do projeto.

Portanto, esta solicitação de recurso é para uma correspondência mais flexível de nomes de regras com argumentos de linha de comando. Uma implementação minimamente útil permitiria correspondência apenas de prefixo. Alternativamente, a correspondência de regex também seria útil.

Comentários muito úteis

Acho a ferramenta compdb muito difícil de usar - para mim, é surpreendente que ela precise de uma lista de regras (demorei um pouco até descobrir isso). Talvez, se nenhuma regra explícita for passada explicitamente, isso poderia significar apenas "todas as regras"? Isso seria o suficiente para compilações baseadas em cmake?

(Não relacionado: acho que você pode passar CMAKE_EXPORT_COMPILE_COMMANDS ao cmake para que ele grave um banco de dados de compilação diretamente.)

Todos 12 comentários

No passado, havia uma ferramenta de "regras" (7b67e48a1479c6fc7326c55756088bd57d64fc82) que podia imprimir a lista de todas as regras. Com essa ferramenta, poderíamos ter feito algo assim:

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

Acho que seria uma boa ideia ressuscitar essa ferramenta, pois ela também pode ajudar a escrever um script de conclusão do shell. Vou tentar fazer isso nos próximos dias.

Isso também funcionaria, obrigado.

Acho a ferramenta compdb muito difícil de usar - para mim, é surpreendente que ela precise de uma lista de regras (demorei um pouco até descobrir isso). Talvez, se nenhuma regra explícita for passada explicitamente, isso poderia significar apenas "todas as regras"? Isso seria o suficiente para compilações baseadas em cmake?

(Não relacionado: acho que você pode passar CMAKE_EXPORT_COMPILE_COMMANDS ao cmake para que ele grave um banco de dados de compilação diretamente.)

Está aqui alguém? 🙂

a ferramenta de regras parece removida da compilação?

Isso seria muito útil.

Eu gosto da sugestão de @nico de apenas imprimir todas as regras por padrão. No futuro, algo mais sofisticado (como correspondência de curinga) pode ser adicionado, se necessário.

Noto que as soluções alternativas sugeridas por aqui são bastante feias, motivando uma solução mais bonita no próprio ninja :)

Agora há # 1377 para despejar todas as regras por padrão.

Desejado adicionar uma pequena nota aqui, parece que para alguns projetos CMake [0], ninja -t compdb (sem args) não irá despejar nada (a saída é uma lista vazia [] ).

cmake -G Ninja .
ninja -t compdb
[
]

No entanto, usando CMAKE_EXPORT_COMPILE_COMMANDS como único sugerido:

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

ninja -t compdb ainda retorna vazio, mas compile_commands.json já foi gerado.

Obrigado, nico!

[0] para Binaryen pelo menos

O que ninja --version diz?

1.8.2, aliás, este ninja está vindo de depot_tools

Essa versão está faltando # 1377.

Esta página foi útil?
0 / 5 - 0 avaliações