cquery
cquery copied to clipboard
Gtest caused lots of "arguments have changed".
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)
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.
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.
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.