使用 Visual Studio Code 任务在多个文件夹中自动生成 C 生成文件

Bha*_*alp 5 c json makefile build visual-studio-code

我有一个用 C 编写的项目,它有两个 make 文件,一个在主目录中,一个在子目录中。我想使用 VS Code 任务来自动化 make 过程,这样我就不必每次想运行时都使用终端来制作项目。相反,我只想使用ctrl+shift+b,然后使用mpiexec.

我在项目主文件夹内的 .vscode 目录中创建了 tasks.json 文件。tasks.json 当前包含我基于本教程的以下代码

{
    "version": "2.0.0",
    "command": "bash",
    "tasks": [
        {
            "label": "Make Project",
            "type": "shell",
            "command": "cd ${workspaceFolder}",
            "args": ["make"],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我希望这make与在当前工作目录的位置输入终端相同。相反,这是终端的输出

{
    "version": "2.0.0",
    "command": "bash",
    "tasks": [
        {
            "label": "Make Project",
            "type": "shell",
            "command": "cd ${workspaceFolder}",
            "args": ["make"],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,make 文件位于 /home/git/project。我希望然后还在 /home/git/project/subfolder 中构建一个 make 文件。

为什么不是初始命令cd /home/git/project然后make工作?我是否需要使用跑步者将其拆分为几个不同的任务?我是使用 VS Code 的新手,因此非常感谢您的帮助。谢谢。

Bha*_*alp 10

我实施的解决方案如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "msvc build",
            "type": "shell",
            "command": "",
            "args": [
                "make",
                "--directory=${workspaceFolder};",
                "make", 
                "--directory=${workspaceFolder}/subfolder"
            ],
            "group":  {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal":"always"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

基于Reinier Torenbeek 的建议以及Microsoft 页面上的这篇文章。这里要注意的要点是,我没有向 shell 传递任何命令,而是只传递参数。

ctrl+shift+b现在,我只需在编辑器内按一下即可构建项目中的所有 makefile,因为group设置为build.


Rei*_*eek 3

为什么初始命令 cd /home/git/project 然后 make 不起作用?

输出

Executing task: 'cd /home/git/project' make
Run Code Online (Sandbox Code Playgroud)

显示整个表达式cd /home/git/project被解释为单个命令名(包括空格,这是文件名中的有效字符),并作为make其参数。当您查看 json 配置的结构时,这是有意义的。由于不存在这样的命令,因此失败。

可能有多种方法可以使其发挥作用,选择--directory可能make是一个不错的方法。请参阅9.7 选项摘要