The clang_complete plugin for Vim offers superior code completion. If your project is anything but trivial, it will only do so if you provide a .clang_complete file with the right compilation arguments. The easy way to do so is by using the cc_args.py script that comes with it to record the options directly into the .clang_complete file. Usually, one does
make CXX='~/.vim/bin/cc_args.py clang++'
However, the makefile generated by CMake doesn’t support the CXX configuration.
The solution is to call CMake with the CXX environment variable set:
CXX="$HOME/.vim/bin/cc_args.py clang++" cmake ..
make
Note that this will create the .clang_complete file in the build directory (I’ve assumed an out-of-place build), so just copy the file over to Vim’s working directory so it can find it. You’ll need to re-run CMake again (without CXX) to disable re-creating the .clang_complete file each time.
While looking for this solution, I first tried solving it by setting the CMAKE_CXX_COMPILER variable in CMake. However, for some strange reason, it didn’t like it, saying that the compiler wasn’t found (it shuns command-line arguments given in the compiler command).
The more I use clang_complete, the more awesome I find it. It has its quirks, but nonetheless it’s much simpler and better than manually creating tag files for each library.
Updated 6/1/2014: When setting CXX, use $HOME instead of ~ (to fix issues with newer versions of CMake).
Hello,
Using Ubuntu, I can run the command you propose (CXX=”$HOME/.vim/bin/cc_args.py clang++” cmake ..) from my “build/CMakeFiles” directory, and CMake seems to run as usual. But no .clang_complete is generated in “build/CMakeFiles” or in “build”. Am I missing something?
The
.clang_completefile will only appear after you run `make`.Sorry, my message was not clear. I cannot find the .clang_complete file at all after running both commands. But I don’t get any error message… Actually, it seems that CMake ignores the CXX.
Did you
make cleanbeforehand? You can also passVERBOSE=1to make to see detailed output of commands being executed. The .clang_complete file should be created in your build directory.I have the same problem as James, I was originaly compiling with ninja and it didn’t work. So I switched to make, erased my build re run cmake with the CXX argument and still nothing.
And when I create the .clang_complete file myself the autocomplete is still messed up…
Shame really.
Here is what worked for me
sudo chmod a+x $HOME/.vim/bin/cc_args.py
CXX=”$HOME/.vim/bin/cc_args.py g++” sudo cmake ..
sudo make
and then ls -a shows my .clang_complete file but still emtyp though.
Hi, when I
CXX=”$HOME/.vim/bin/cc_args.py clang++” cmake ..
I returns
cc_args.py is not able to compile a simple test program.
and something like permission denied.
I would appreciate if you can help me