clangd无法解析CMake为NVCC生成的-isystem=路径问题求助
问题:clangd无法正确解析CMake为NVCC生成的-isystem=格式参数?
执行clangd --check=my_file.cu时发现:编译数据库中的-isystem=/path/to/lib/include被clangd错误解析为-isystem =/path/to/lib/include(多了一个空格),导致clangd误将路径识别为=/path/to/lib/include,无法找到系统级库的头文件。目前只能通过手动在clangd配置中添加-I /path/to/lib/include来临时解决问题。
该-isystem=...格式由CMake自动生成,在NVCC/GCC编译时可正常工作。当前项目使用C++/CUDA库,但推测问题根源不在库本身。
现寻求以下问题的解答:
- 如何让clangd正确解析CMake为NVCC生成的-isystem参数?
- 这种解析错误是clangd的bug,还是预期行为?
最小复现示例
CMakeLists.txt
# CMakeLists.txt cmake_minimum_required(VERSION 3.20) project(demo LANGUAGES CUDA CXX) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 下载GoogleTest include(FetchContent) message(STATUS "> Downloading dependency: GoogleTest") FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.zip ) FetchContent_MakeAvailable(googletest) message(STATUS "> Downloading dependency: GoogleTest - done") # 构建demo可执行文件 add_executable(demo demo.cu) target_link_libraries(demo GTest::gtest_main)
demo.cu
// demo.cu #include <iostream> int main() { std::cout << "Hello world" << std::endl; }
执行cmake -B build .后,生成的编译数据库中,CUDA代码对应的系统包含路径采用-isystem=...格式。
环境版本信息:
- CMake 3.24.3
- NVCC
cuda_12.2.r12.2/compiler.33191640_0
内容的提问来源于stack exchange,提问作者Sean Bone
相关产品推荐
相关产品推荐

