xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.04k stars 785 forks source link

VSCode Intellisense not working with non-default targets #1124

Closed xq114 closed 3 years ago

xq114 commented 3 years ago

注:如果是问题报障或者特性请求,请选择报告缺陷特性请求模板,否则一律不回复。

描述讨论详情

目前xmake-VSCode的Intellisense依赖生成的compile_commands.json,然而compile_commands.json缺失了非默认的target导致这些target里的文件无法正确产生Intellisense

xq114 commented 3 years ago

image

根据VSCode的文档,用compile_commands来作为intellisense provider可能并不是一个好的选择,因为如果没有entry(比如单独开一个头文件不打开对应的cpp文件)这个文件就会忽略compile_commands.json而使用用户设置的include

如果xmake可以提供一个vscode-plugin生成一个c_cpp_properties.json(包括include,define,language version)就更好了,这个compile_commands不导出非默认目标可以不用修改

waruqi commented 3 years ago

目前xmake-VSCode的Intellisense依赖生成的compile_commands.json,然而compile_commands.json缺失了非默认的target导致这些target里的文件无法正确产生Intellisense

default设置主要用于控制编译行为,而对于 compile_commands 倒是不用关心这些,我刚改了下 放开 default target了,你可以更新到 dev 版本再试试

如果xmake可以提供一个vscode-plugin生成一个c_cpp_properties.json(包括include,define,language version)就更好了,这个compile_commands不导出非默认目标可以不用修改

这就等于完全接管 c_cpp_properties 了,后续的所有设置智能依赖 xmake.lua 的配置进行自动生成,用户也没法直接在 c_cpp_properties 里面增删其他东西了,如果xmake生成的结果确实能满足所有用户需求那也没啥,如果满足不了一些用户的定制配置,那么连自定义配置的机会都没了。

目前我感觉 compile_commands 足够了,如果真有一些额外的配置,用户可以自己在 c_cpp_properties 里面追加配置。