正如标题所说,我可以从现有的 Makefile 中自动填充 c_cpp_properties.json 吗?
编辑:
对于其他尝试导入 makefile 的人,我找到了一组脚本,它们完全可以执行我想要实现的目标,即通过 VS Code 管理 STM32 嵌入式项目。如果您深入脚本文件夹,您可以找到 make 解析器和 VSCode 项目文件填充器。
这里是回购,享受!
正如标题所说,我可以从现有的 Makefile 中自动填充 c_cpp_properties.json 吗?
编辑:
对于其他尝试导入 makefile 的人,我找到了一组脚本,它们完全可以执行我想要实现的目标,即通过 VS Code 管理 STM32 嵌入式项目。如果您深入脚本文件夹,您可以找到 make 解析器和 VSCode 项目文件填充器。
这里是回购,享受!
这个答案可能无法完全满足您的需求,但希望它可以帮助您设置 VS Code 环境。
在您的问题标题中,您提到了“Makefile 项目”,这表明您对(GNU)Makefile 以类似于 Visual Studio 项目文件的方式捕获项目设置有错误的印象。Makefile 不能那样工作,对您的问题的简短回答是不,似乎没有办法将 Makefile“导入”到 VS Code 并让它自动在您的c_cpp_properties.json
文件中设置值。
话虽如此,根据您的工具链中的其他元素,还有一些其他机制可以帮助您在您的情况下开始使用 VS Code。
VS Code 的工作前提是它会在你的文件系统中打开一个或多个目录。当您这样做时,它将自动扫描其所有子目录,显示树并进行 linting(如果启用)以检测问题。实际上,包含目录需要手动添加到您的c_cpp_properties.json
文件中,但是要将所有子目录递归添加到包含目录列表中,您可以使用表达式
"${workspaceRoot}/**"
includePath
作为您设置中的元素之一。请参阅博文Visual Studio Code C/C++ 扩展 2018 年 5 月更新 – IntelliSense 配置变得如此简单!更多细节。这通常可以解决很多缺失的符号。如果您也在使用外部或 3rd 方库,那么您必须includePath
手动将它们添加到您的设置中,这是没有办法的。
此外,您可以创建 VS Code 任务来执行make
您喜欢的命令。此处对此进行了解释:通过任务与外部工具集成。Microsoft C/C++ 扩展附带一组所谓的问题匹配器,它们解析命令的输出并可以为某些已知的编译器解释它。您将看到错误和警告的超链接,以直接导航到代码中的关联位置。
此类任务的示例可能如下所示:
{
"label": "Build All Debug",
"type": "shell",
"command": "make -f path/to/Makefile DEBUG=1",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": [
"$gcc"
]
}
Visual Studio Code 的 C/C++ Intellisense 扩展支持 compile_commands.json 数据库。一些 makefile 实用程序可以自己生成这些数据库,但我没有任何使用它们的经验。使用 GNU make,您将需要某种帮助脚本或工具。我使用了python包compiledb:
sudo pip install compiledb
cd projectfolder
make clean
compiledb make
运行之后,你应该得到一个 compile_commands.json 文件。然后,在 VS Code 中,您需要为相关工作区编辑 c_cpp_properties.json。打开它的一种方法是单击状态栏右下角的配置名称,然后单击“编辑配置(json)”。或者,您可以打开命令面板(在我的系统上为 CTRL + SHIFT + P),然后输入C/C++: Edit configurations (JSON)
然后,在您使用的配置中,添加属性"compileCommands": "${workspaceFolder}/compile_commands.json"
完整示例:
{
"configurations": [
{
"name": "geany",
"includePath": [
"${workspaceFolder}/**"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": [
"${workspaceFolder}/**"
],
"limitSymbolsToIncludedHeaders": true
},
"compileCommands": "${workspaceFolder}/compile_commands.json"
}
],
"version": 4
}
现在,Visual Studio 代码的 Intellisense 分析应该使用完全正确的包含目录、定义指令和其他对每个单独的源文件唯一的命令行编译器标志。
对于其他尝试导入 makefile 的人,我找到了一组脚本,它们完全可以执行我想要实现的目标,即通过 VS Code 管理 STM32 嵌入式项目。如果您深入脚本文件夹,您可以找到 make 解析器和 VSCode 项目文件填充器。
这里是回购,享受!
GNU Make 通常用于编译 C 项目,但它可以生成您想要的任何类型的输出文件。
您可以为此目的创建一个脚本,或者您可以从另一个 makefile 中执行此操作,例如:VSCode.mk
您include
在顶层Makefile
.
此解决方案使用One Shell,但如果这不可行,单独的脚本会更好看。
@使您的输出更好。
您很可能无法安全地复制粘贴此代码,因为 Make 使用的是文字制表符,而不是空格。
.ONESHELL:
SOURCE_DIRECTORY := src
DEFINED_VALUE := 1
# Recipe:
.vscode/c_cpp_properties.json:
@
cat << EOF > "$@"
{
"configurations": [
{
"name": "Linux",
"includePath": [
"\$${workspaceFolder}/$(SOURCE_DIRECTORY)*"
],
"defines": [
"DEFINED_VALUE=$(DEFINED_VALUE)"
],
"compilerPath": "$(CC)",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64",
"browse" : {
"limitSymbolsToIncludedHeaders" : true
}
}
],
"version": 4
}
EOF