.h 文件默认按 C 打开。如果希望头文件按 C++ 处理,在 设置 › 编辑器 › 文件类型 中修改关联。
语言服务器
C 和 C++ 的 clangd 以--background-index --header-insertion=never 启动:在后台为整个项目建立索引,并且不会自行插入 #include。
clangd 从当前文件向上查找以下文件来确定工作区根目录:compile_commands.json、compile_flags.txt、.clangd、CMakeLists.txt、meson.build、Makefile。Objective-C 和 Objective-C++ 只认 compile_commands.json、compile_flags.txt 和 .clangd。
编译参数
clangd 需要知道每个文件的编译参数,否则只能猜测,常见的表现是误报找不到头文件或宏未定义。可以提供以下任一文件:compile_commands.json:编译数据库。打开CMAKE_EXPORT_COMPILE_COMMANDS后 CMake 会把它写到构建目录中,OpenIDEA 生成的 CMake 配置总是带上-DCMAKE_EXPORT_COMPILE_COMMANDS=ON(见下文“CMake”一节)。基于 Make 的项目可以用 Bear 等工具生成。compile_flags.txt:每行一个参数,对所有文件生效,适合小项目。.clangd:clangd 自己的配置文件,例如用CompilationDatabase指向某个构建目录。
Apple 自带的 clangd
Xcode 和 Command Line Tools 自带的clangd 不运行 clang-tidy。如果项目里有 .clang-tidy,而 IDE 正在使用 Apple 的 clangd,会弹出提示并提供 安装 按钮,改装 LLVM 版本的 clangd。
环境配置
缺少 clangd 时,打开 C/C++ 文件会弹出“clangd 未安装”的通知,点 安装 即可。也可以在 设置 › 语言和框架 › 语言服务器 中安装。PATH 上已有的 clangd 或调试器会直接使用。如需指定某个可执行文件,在 设置 › 语言和框架 › 语言服务器 中该工具的页面里选择。
编译器不由 IDE 管理。单文件运行时,C 依次在 PATH 上查找 clang、gcc、cc,C++ 查找 clang++、g++、c++。
构建、运行与测试
CMake
对每个包含CMakeLists.txt 的项目,OpenIDEA 会生成以下运行配置:
- CMake Configure:
cmake -S . -B <构建目录> -DCMAKE_EXPORT_COMPILE_COMMANDS=ON(新构建目录还会加上-DCMAKE_BUILD_TYPE=Debug)。 - CMake Build:
cmake --build <构建目录>,构建目录尚未配置时会先执行配置步骤。 - CTest:先构建,再执行
ctest --test-dir <构建目录> --output-on-failure。 - Build <目标>,以及每个可执行目标各一个运行配置。运行目标前会先构建它。
CMakeCache.txt 的子目录;一个都没有时使用 build/。
CMake 配置
如果想自己控制构建目录,在 设置 › 构建、执行、部署 › CMake 中添加配置(界面上叫“CMake 配置”)。每个配置包含:
一旦添加了配置,就只使用这些配置。修改已有构建目录的生成器后,下次配置时会清掉它的 CMake 缓存。
Makefile
Makefile、makefile 或 GNUmakefile 中的每个目标都会生成一个 make <目标> 配置,其中 test 和 check 目标标记为测试。
单个文件
带main 函数的 C/C++ 文件不需要构建系统也能运行:使用 运行上下文配置(⌃⇧R / Ctrl+Shift+F10)或 调试上下文配置(macOS 上为 ⌃⇧D)。IDE 会带调试信息(-g,C++ 另加 -std=c++17)把文件编译到临时目录再运行。
通用用法见运行配置和测试。
调试
调试通过 DAP 适配器完成。C 和 C++ 配置默认使用 lldb-dap,如需更换,打开运行配置修改 调试适配器:- lldb-dap (C, C++, Swift):LLVM 提供的适配器,默认选项。IDE 不负责安装。
- CodeLLDB (Rust, C, C++):IDE 可以安装;开始调试时如果缺失,会弹出通知提供安装。
- GDB(C、C++):GDB 自带的 DAP 模式(
gdb -i dap),需要 GDB 14 或更高版本,版本过低会提示并拒绝启动。
Arduino
.ino 草图使用 Arduino Language Server,它为 clangd 提供 Arduino 生成的编译上下文。IDE 不负责安装:请安装 Arduino IDE 2(其中包含 Arduino Language Server、Arduino CLI 和 clangd)以及对应开发板的核心。OpenIDEA 会在 PATH 或 Arduino IDE 2 的安装目录中查找这些工具。
如需覆盖路径,可以在 设置 › 语言和框架 › 语言服务器 中设置,或在 settings.toml 中设置 languages.arduino.cli、languages.arduino.clangd、languages.arduino.languageServer 和 languages.arduino.cliConfig。开发板 FQBN 写在 sketch.yaml 或 languages.arduino.fqbn 中。草图旁边的普通 .cpp 文件仍由 clangd 处理。
目前没有 Arduino 的上传或串口监视器功能。
已知限制
- C/C++ 代码智能的质量取决于 clangd 拿到的编译参数。没有
compile_commands.json或compile_flags.txt时会有误报。 - IDE 不会为 Make、Meson 等构建系统生成编译数据库。
- CTest 作为一个整体配置运行,只显示控制台输出,不会在测试树中列出单个测试。
- 没有针对 C/C++ 测试框架(GoogleTest、Catch2 等)的行号栏运行图标。
- lldb-dap 和 GDB 不由 IDE 安装。