C++ cmake是否生成多个compile_commands.json?
我一直在使用cmake和vim,并生成一个compile_commands.json文件来获取autocomplete。我遇到的问题是我有一个文件结构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文件
build include src
其中,我的所有头文件都在include目录中,源文件在src中。在使用cmake I setset(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)。这还将确保在使用/发布库之前编译并捕获头文件,以及捕获任何错误