Lucas
Lucas

Reputation: 2642

CMake not generating compile_commands.json

I'm new to CMake and I'm trying to create the compile_commands.json file to use with clang, but I'm having some difficulties generating the file and I'm not sure why. I've been able to use cmake to compile the binary person that I have below, but after that was successful I've been unable to get it to output the compile commands.

I've also tried doing the -DCMAKE_EXPORT_COMPILE_COMMANDS=ON flag, but that didn't work either. So far there's been no errors, but also no output.

Here's what my CMakeLists.txt file looks like:

cmake_minimum_required (VERSION 2.6)
project (Tutorial)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_executable(person Person.cc Pirate.cc main.cc)

Upvotes: 32

Views: 66530

Answers (3)

Aaron Zhang
Aaron Zhang

Reputation: 141

I also encountered the same problem as you. According to CMake doc

This option (CMAKE_EXPORT_COMPILE_COMMANDS) is implemented only by Makefile Generators and the Ninja. It is ignored on other generators.

Thus, there is no solution to generate compile_commands.json file when using MSVC.

Upvotes: 11

PJ127
PJ127

Reputation: 1258

I had the same problem, compile_commands.json was not generated with cmake, version 3.16.0. It was generated when I used the Ninja generator, but not Unix Makefiles.

That discussion gave me the fix:

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # does not produce the json file
set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "") # works

Upvotes: 12

Lucas
Lucas

Reputation: 2642

This ended up being an issue with using an old version of CMake. I ended up installing the newest version and it worked as expected.

According to Clang docs

"Currently CMake (since 2.8.5) supports generation of compilation databases for Unix Makefile builds (Ninja builds in the works) with the option CMAKE_EXPORT_COMPILE_COMMANDS."

Upvotes: 17

Related Questions