gpt4 book ai didi

c++ - cmake 生成多个 compile_commands.json?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:20 39 4
gpt4 key购买 nike

我一直在 vim 中使用 cmake 并生成一个 compile_commands.json 文件来获得自动完成功能。我遇到的问题是我有一个文件结构

build     include     src

我的所有头文件都在 include 目录中,源代码在 src 中。在使用 cmake 时,我设置了 set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 来为项目生成代码完成数据库。生成 compile_commands.json 时,它仅适用于包含我的 CMakeLists.txt 文件 (src) 的文件夹,因此我没有完成 include 目录。

有什么方法可以为这个单独的文件夹生成 compile_commands.json 吗?我是否最终需要将所有头文件放在与源代码相同的文件夹中?

只是为了澄清只有一个正在构建的 cmake 项目,因此头文件不对应于一个单独的项目,例如库。

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

gitlab cmake header files

此外,如果有人知道可以解决我的情况的解决方法,我们也将不胜感激。

如果有助于澄清我的情况,请参阅下面的 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_commands.json 包含源文件的编译命令。除非头文件是翻译单元的一部分,否则不会编译头文件。您也许可以使用周围的源文件做出最佳猜测,但这很容易出错。

请记住,头文件的编译标志可能不同,具体取决于包含它的源文件。

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

关于c++ - cmake 生成多个 compile_commands.json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49702722/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com