如何用CMake为仅头文件库生成适配clangd的compile_commands.json?
CMake生成compile_commands.json让clangd解析第三方库的解决方法
我正在学习CMake与clangd,但无法找到让CMake生成合适的compile_commands.json的方法,以便clangd能够解析第三方库。以下是我已尝试的代码:
add_library(date_fmt INTERFACE) target_include_directories( date_fmt INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>) target_sources( date_fmt INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>$<INSTALL_INTERFACE:include>/date_fmt/date_fmt.hpp ) target_link_libraries(date_fmt INTERFACE date) target_link_libraries(date_fmt INTERFACE fmt)
解决方案:
确保CMake版本≥3.5,开启编译命令导出。可在项目根目录的CMakeLists.txt开头添加:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)或执行cmake时通过参数指定:
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON确认第三方库的CMake配置正确。
date和fmt需通过find_package正确引入(如find_package(date REQUIRED)、find_package(fmt REQUIRED)),且它们的CMake目标已导出INTERFACE_INCLUDE_DIRECTORIES等必要信息,这样date_fmt关联后,这些信息才会被写入compile_commands.json。若clangd仍无法识别,可将生成的
compile_commands.json从build目录链接到项目根目录:ln -s build/compile_commands.json .部分编辑器的clangd插件会优先读取根目录的该文件。
检查
compile_commands.json内容,确认其中是否包含date和fmt的包含路径。若缺失,需排查第三方库的CMake配置是否正确导出了接口信息。
内容的提问来源于stack exchange,提问作者FeignClaims
相关产品推荐
相关产品推荐

