Create any trivial Hello, World! style program and combine compile & link on the command line like this:
$ g++-13 -o hello hello.cc
$ clang++-17 -o hello hello.cc
That's a perfectly normal thing to do and should work perfectly fine.
Then do that through Bear:
$ bear -- g++-13 -o hello hello.cc
That works fine and generates a compile_commands.json file with a single entry, which contains exactly that one single command line, just as expected.
Then do that with Clang instead:
$ bear -- clang++-17 -o hello hello.cc
That generates a compile_commands.json file with two different entries, one with that one single command line plus one for the underlying execution of the compile step, with a very long arguments list.
This is a problem because that internal command line for the internal compile step can't be executed directly from the command line and trying to use this compilation database with Clang-Tidy will therefore result in a compilation error:
$ clang-tidy-17 -checks='*' hello.cc
[…]
error: error reading 'pic': No such file or directory [clang-diagnostic-error]
That pic comes from the internal command line, which shouldn't have been included in the compile_commands.json file.
This happens both with the Bear 3.1.3 release and with Bear built from source at current HEAD.
Create any trivial Hello, World! style program and combine compile & link on the command line like this:
That's a perfectly normal thing to do and should work perfectly fine.
Then do that through Bear:
That works fine and generates a
compile_commands.jsonfile with a single entry, which contains exactly that one single command line, just as expected.Then do that with Clang instead:
That generates a
compile_commands.jsonfile with two different entries, one with that one single command line plus one for the underlying execution of the compile step, with a very longargumentslist.This is a problem because that internal command line for the internal compile step can't be executed directly from the command line and trying to use this compilation database with Clang-Tidy will therefore result in a compilation error:
That
piccomes from the internal command line, which shouldn't have been included in thecompile_commands.jsonfile.This happens both with the Bear 3.1.3 release and with Bear built from source at current
HEAD.