cquery icon indicating copy to clipboard operation
cquery copied to clipboard

Gtest caused lots of "arguments have changed".

Open scturtle opened this issue 6 years ago • 3 comments

In compile_commands.json, there are multiple gtest entries with different flags and target path:

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgmock_EXPORTS -I/usr/src/gmock/include -I/usr/src/gmock -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/CMakeFiles/gmock.dir/usr/src/gtest/src/gtest-all.cc.o -c /usr/src/gtest/src/gtest-all.cc",
  "file": "/usr/src/gtest/src/gtest-all.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgmock_EXPORTS -I/usr/src/gmock/include -I/usr/src/gmock -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/CMakeFiles/gmock.dir/src/gmock-all.cc.o -c /usr/src/gmock/src/gmock-all.cc",
  "file": "/usr/src/gmock/src/gmock-all.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgmock_main_EXPORTS -I/usr/src/gmock/include -I/usr/src/gmock -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/CMakeFiles/gmock_main.dir/usr/src/gtest/src/gtest-all.cc.o -c /usr/src/gtest/src/gtest-all.cc",
  "file": "/usr/src/gtest/src/gtest-all.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgmock_main_EXPORTS -I/usr/src/gmock/include -I/usr/src/gmock -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/CMakeFiles/gmock_main.dir/src/gmock-all.cc.o -c /usr/src/gmock/src/gmock-all.cc",
  "file": "/usr/src/gmock/src/gmock-all.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgmock_main_EXPORTS -I/usr/src/gmock/include -I/usr/src/gmock -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/CMakeFiles/gmock_main.dir/src/gmock_main.cc.o -c /usr/src/gmock/src/gmock_main.cc",
  "file": "/usr/src/gmock/src/gmock_main.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgtest_EXPORTS -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/gtest/CMakeFiles/gtest.dir/src/gtest-all.cc.o -c /usr/src/gtest/src/gtest-all.cc",
  "file": "/usr/src/gtest/src/gtest-all.cc"
},

{
  "directory": "PATH_TO_BUILD",
  "command": "/usr/bin/c++   -DGTEST_CREATE_SHARED_LIBRARY=1 -Dgtest_main_EXPORTS -I/usr/src/gtest/include -I/usr/src/gtest  -O2 -g -DNDEBUG -fPIC    -Wall -Wshadow -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest/gtest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o -c /usr/src/gtest/src/gtest_main.cc",
  "file": "/usr/src/gtest/src/gtest_main.cc"
},

And lots of system headers are re-indexed every time.

(   0.021s) [indexer3     ]import_pipeline.cc:200   | Arguments have changed for /usr/include/errno.h (via /usr/src/gmock/src/gmock-all.cc)

scturtle avatar Apr 16 '18 11:04 scturtle

I think the solution here is to arbitrarily pick one set of flags to index (and perhaps warn the user there are duplicates); fundamentally cquery only really supports one canonical version of a file.

jacobdufault avatar Apr 16 '18 17:04 jacobdufault

In my project I also have cases where the same file is compiled multiple times with different flags. For me the ideal solution would be an arbitrary choice by default, and additionally a way to choose which set of flags is currently enabled.

Boddlnagg avatar Apr 16 '18 17:04 Boddlnagg

I was bitten by it, too. Right now I remove the duplicates manually, which reduces reinitialization times by factor 10. Would be nice, if it were a cquery feature.

alendit avatar Jul 31 '18 19:07 alendit