C++ cmake是否生成多个compile_commands.json?

C++ cmake是否生成多个compile_commands.json?,c++,vim,cmake,youcompleteme,C++,Vim,Cmake,Youcompleteme,我一直在使用cmake和vim,并生成一个compile_commands.json文件来获取autocomplete。我遇到的问题是我有一个文件结构 build include src 其中,我的所有头文件都在include目录中,源文件在src中。在使用cmake I setset(cmake\u EXPORT\u COMPILE\u命令打开)为项目生成代码完成数据库时。生成compile\u commands.json时,它仅适用于包含我的CMakeLists.txt文件

我一直在使用cmake和vim,并生成一个compile_commands.json文件来获取autocomplete。我遇到的问题是我有一个文件结构

build     include     src
其中,我的所有头文件都在include目录中,源文件在src中。在使用cmake I set
set(cmake\u EXPORT\u COMPILE\u命令打开)
为项目生成代码完成数据库时。生成
compile\u commands.json
时,它仅适用于包含我的
CMakeLists.txt
文件(src)的文件夹,因此我没有完成
include
目录中的头文件

有没有办法为这个单独的文件夹生成
compile\u commands.json
?我是否需要将所有头文件与源代码放在同一个文件夹中

只是澄清一下,只有一个cmake项目正在构建中,所以头文件并不对应于单独的项目,例如库

我也在谷歌上搜索了很多,但是我主要发现了一些与人们不能生成compile_commands.json有关的东西,但是我也在其他网站上看到了clang不能解析头文件的情况?我看到的关于clang不解析头文件以生成完成数据库的信息是几年前的事,但是这就是我在这里遇到麻烦的原因吗

此外,如果有人知道一个解决办法,将弥补我的情况,也将非常感谢

如果这有助于澄清我的情况,请参阅下面的CMakeLists.txt文件,谢谢:

CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0 FATAL_ERROR)
project(inheritance VERSION 0.1.1 LANGUAGES CXX)

# add executable
add_executable(inheritance main.cpp CommissionEmployee.cpp)
target_include_directories(inheritance PRIVATE ../include)
target_compile_features(inheritance PRIVATE cxx_std_14)

# generate compile_commands.json
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

compile\u commands.json
为源文件提供了编译命令。头文件除非是翻译单元的一部分,否则不会被编译。您也许可以使用周围的源文件进行最佳猜测,但这很容易出错

请记住,根据包含头文件的源文件的不同,头文件的编译标志可能不同

一种可能的解决方案是在源文件中包含头文件(可能是使用
CMake
自动生成的),该源文件包含所有头文件(有点像PCH)。这还将确保在使用/发布库之前编译并捕获头文件,以及捕获任何错误