[PATCH] Generate a clang CompilationDatabase when running CMake.

Justin Lebar via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 14 11:15:15 PST 2015


> We already document to do this on the command line in all of the tooling
> docs

FWIW that wasn't where I looked as someone new to the project; it
doesn't show up in http://llvm.org/docs/GettingStarted.html.  Of
course that page can't be a guide to all conceivable options.

> does it actually make sense to default this to on?

My thought was, one less thing you have to remember to do.  It's
annoying enough that you have to add a .ycm_extra_config.

In fact, while I have your attention...do you have any thoughts on how
we might make adding a .ycm_extra_config file easier?  We could check
one in to llvm/utils with instructions to copy it down to the root
directory.  The problem with just sticking it in the root dir is that
this file needs to specify where your object files are located.

That seems better than asking people to cargo-cult from the canonical
.ycm_extra_config, which requires some minor but nontrivial
modifications to work with llvm.

> I suppose as long as this is fast to do (I haven't checked, is it?) there's no harm in it.

Doesn't appear to be significant.  On my macbook pro, after warming up
the disk cache, I ran

$ time cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo ..

Without the patch (ran 3 times):

real 0m17.875s
user 0m10.563s
sys 0m5.935s

real 0m18.335s
user 0m10.948s
sys 0m5.981s

real 0m17.757s
user 0m10.562s
sys 0m5.836s

With the patch:

real 0m18.461s
user 0m10.737s
sys 0m6.215s

real 0m18.243s
user 0m10.805s
sys 0m6.022s

real 0m17.724s
user 0m10.715s
sys 0m6.009s

On Mon, Dec 14, 2015 at 10:53 AM, Justin Bogner <mail at justinbogner.com> wrote:
> Justin Lebar via llvm-commits <llvm-commits at lists.llvm.org> writes:
>> This generates a compile_commands.json file, which tells tools like
>> YouCompleteMe and clang_complete exactly how to build each source file.
>> ---
>>  CMakeLists.txt | 4 ++++
>>  1 file changed, 4 insertions(+)
>> diff --git a/CMakeLists.txt b/CMakeLists.txt
>> index fc46413..208c0a8 100644
>> --- a/CMakeLists.txt
>> +++ b/CMakeLists.txt
>> @@ -86,6 +86,10 @@ set(CMAKE_MODULE_PATH
>>    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules"
>>    )
>>
>> +# Generate a CompilationDatabase (compile_commands.json file) for our build,
>> +# for use by clang_complete, YouCompleteMe, etc.
>> +set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
>
> We already document to do this on the command line in all of the tooling
> docs, does it actually make sense to default this to on? I suppose as
> long as this is fast to do (I haven't checked, is it?) there's no harm
> in it.
>
>> +
>>  option(LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF)
>>
>>  option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF)
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list