xmake-io / xmake-vscode

🍩 A XMake integration in Visual Studio Code
https://xmake.io
Apache License 2.0
229 stars 54 forks source link

Auto-generated compile_commands.json doesn't include packages' headers #104

Closed v1nh1shungry closed 2 years ago

v1nh1shungry commented 2 years ago

Xmake 版本

2.6.5

操作系统版本和架构

5.10.16.3-microsoft-standard-WSL2

描述问题

我在项目中添加了从xrepo安装的package(在下面的工程配置例子中是sfml),在保存xmake.lua后不久自动生成了compile_commands.json文件,但是自动生成的compile_commands.json文件中没有include我添加的package的头文件,如下:

[
{
  "directory": "/home/vinh/repos/cpp/tutor",
  "arguments": ["/usr/bin/gcc", "-c", "-m64", "-o", "build/.objs/tutor/linux/x86_64/src/main.cpp.o", "src/main.cpp"],
  "file": "src/main.cpp"
}]

然而手动使用xmake project -k compile_commands生成的json文件是正常的,正确地include了所用的package的头文件目录。

期待的结果

生成的compile_commands.json能够include(-I)添加的包的头文件目录。

工程配置

add_rules("mode.debug", "mode.release")

add_requires("sfml")

target("tutor")
    set_kind("binary")
    add_files("src/*.cpp")
    add_packages("sfml")

附加信息和错误日志

No response

waruqi commented 2 years ago

我这里可以,没法复现,可以 命令执行下看看 xmake project -k compile_commands 也可以先 xmake f -c 清下缓存,重新 fetch 包配置

[
{
  "directory": "/private/tmp/test",
  "arguments": ["/usr/local/bin/ccache", "/usr/bin/xcrun", "-sdk", "macosx", "clang", "-c", "-Qunused-arguments", "-arch", "x86_64", "-mmacosx-version-min=11.4", "-isysroot", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.3.sdk", "-fvisibility=hidden", "-fvisibility-inlines-hidden", "-O3", "-I", "/Users/ruki/.xmake/packages/s/sfml/2.5.1/a7870cfff1a548818886e8c4d5e5b4a2/include", "-DNDEBUG", "-o", "build/.objs/tutor/macosx/x86_64/release/src/main.cpp.o", "src/main.cpp"],
  "file": "src/main.cpp"
}]
v1nh1shungry commented 2 years ago

xmake project -k compile_commands输出的是正常的,我之前有提到过。就每次用xmake新建好项目,用code打开,修改xmake.lua然后保存以后,感觉像是插件自动执行的配置动作没有完全config一样,它的输出文件结构是这样的:

.
├── build
│   └── compile_commands.json
├── .gitignore
├── src
│   └── main.cpp
├── .xmake
│   └── linux
│       └── x86_64
│           └── cache
│               ├── detect
│               └── toolchain
└── xmake.lua

没有配置包的信息,但是执行xmake build之类的命令后就config完全了,此时执行XMake: UpdateIntellisense命令以后也就随之完整了。不清楚为什么xmake.lua保存后插件自动执行的配置动作不完整。

waruqi commented 2 years ago

需要先编译或者 config一次,否则取不到配置信息

v1nh1shungry commented 2 years ago

我不明白为什么插件自动执行的配置动作会不完整,这样插件自动生成的compile_commands.json就无意义了啊,而且貌似添加set_languages这样的指令会更新compile_commands.json,而添加package这样的动作却没有反应。我觉得这应该是一个问题而不是feature。