Vim: Creating .clang_complete using CMake

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).

7 thoughts on “Vim: Creating .clang_complete using CMake

  1. 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?

  2. 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.

  3. Did you make clean beforehand? You can also pass VERBOSE=1 to make to see detailed output of commands being executed. The .clang_complete file should be created in your build directory.

  4. 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.

  5. 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.

  6. 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

Leave a Reply

Your email address will not be published. Required fields are marked *