Bear
Bear copied to clipboard
Combining compile & link with Clang results in erroneous entry
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
.