VS Code上有没有办法导入Makefile项目?

时间:2018-12-07 17:46:18

标签: makefile visual-studio-code

正如标题所述,我可以从现有的Makefile中自动填充c_cpp_properties.json吗?

4 个答案:

答案 0 :(得分:6)

Visual Studio Code的C / C ++ Intellisense扩展支持compile_commands.json数据库。一些makefile实用程序可以自行生成这些数据库,但是我没有使用它们的经验。使用GNU make,您将需要某种帮助程序脚本或工具。我用的是python包的compedb:

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分析应该使用完全正确的包含目录,define指令和每个单独的源文件唯一的其他命令行编译器标志。

答案 1 :(得分:2)

此答案可能不会完全为您提供所需的内容,但希望它可以帮助您设置VS Code环境。

在问题标题中,您提到“ Makefile项目”,这表明您对(GNU)Makefile以类似于Visual Studio项目文件的方式捕获项目设置的印象不正确。 Makefile不能那样工作,对您问题的简短回答是“否”,似乎没有一种方法可以将“ Makefile”“导入”到VS Code中,并使其自动在您的c_cpp_properties.json文件中设置值。

话虽如此,根据您工具链中的其他元素,还有一些其他机制可以帮助您根据情况开始使用VS Code。

VS Code的前提是它在文件系统中打开一个或多个目录。这样做时,它将自动扫描其所有子目录,显示树并进行整理(如果启用)以检测问题。实际上,需要手动将包含目录添加到您的c_cpp_properties.json文件中,但是要将所有子目录递归添加到包含目录列表中,则可以使用表达式

"${workspaceRoot}/**"

作为includePath设置中的元素之一。有关更多详细信息,请参见博客文章Visual Studio Code C/C++ extension May 2018 Update – IntelliSense configuration just got so much easier!。这通常可以解决许多缺少的符号。如果您还使用外部库或第三方库,则必须将它们手动添加到includePath设置中,无法解决。

此外,您可以根据自己的喜好创建VS代码任务来执行make命令。此处说明:Integrate with External Tools via TasksMicrosoft C/C++ Extension带有一组所谓的ProblemMatchers,它们可以解析命令的输出并可以为某些已知的编译器解释该输出。您将看到超链接,其中包含错误和警告,可直接导航到代码中的关联位置。

此类任务的示例可能如下所示:

    {
        "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"
        ]
    }

答案 2 :(得分:1)

GNU Make通常用于编译C项目,但它可以生成所需的任何类型的输出文件。

您可以为此目的创建脚本,也可以从另一个生成文件中创建脚本,例如:VSCode.mkinclude在顶层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

答案 3 :(得分:0)

对于其他尝试导入makefile的人,我发现了一组脚本,这些脚本完全可以实现我想要实现的功能,即通过VS Code管理STM32嵌入式项目。如果您深入到scripts文件夹,则可以找到make解析器和VSCode项目文件填充器。

Here回购,尽情享受!