xmake icon indicating copy to clipboard operation
xmake copied to clipboard

Generated `compile_commands.json` is incomplete when using precompiled headers

Open Locietta opened this issue 2 years ago • 4 comments

Xmake 版本

2.7.1

操作系统版本和架构

Windows 11 22H2

描述问题

我用clangd+xmake,但是xmake自动生成的compile_commands.json里面没把预编译头相关的选项导出来 所以用了set_pcxxheader/set_pcheader之后clangd的高亮会不对😕

对于cl/clang-cl需要加上-FI选项,对gcc/clang需要加上-include选项

期待的结果

当使用了set_pcxxheader/set_pcheader时,在compile_commands.json里需要加上-FI或者-include参数指定被强制包含的预编译头文件

工程配置

/// main.cpp
int main() {
    printf("Hello, world\n");
}

/// pch.h
#include<iostream>
target("main")
    set_kind("binary")
    add_files("main.cpp")
    set_pcxxheader("pch.h")

附加信息和错误日志

No response

Locietta avatar Sep 14 '22 16:09 Locietta

我禁用了,目前不支持,按理不管是否使用 pch,你只要 main.cpp 里面 include 了,就不会有问题,一样可用,但你这 main 里没去 include

waruqi avatar Sep 14 '22 16:09 waruqi

这么做是有什么原因吗?

cpp里确实是这样,但如果我有个.h里面依赖了pch的内容,那这个.h的高亮也就不行了(我不该在头文件里引入预编译头吧?)

Locietta avatar Sep 14 '22 16:09 Locietta

这么做是有什么原因吗?

单纯只是没时间,懒得搞,所以直接禁用,退化到正常 include ,反正 cpp 里也能正常 work

waruqi avatar Sep 14 '22 23:09 waruqi

直接把plugins/project/clang/compile_commands.lua里头的target:set("pcheader", nil)这两行注掉好像就能用了,现在还没遇到什么bug

Locietta avatar Sep 22 '22 02:09 Locietta

由于你测试过 clangd 支持它。目前 dev 版本可以通过 --lsp=clangd 参数也放开对 pcheader 的支持。。

xmake project -k compile_commands --lsp=clangd

waruqi avatar Dec 29 '22 06:12 waruqi