单击问题窗口时,在Visual Studio代码上找不到文件错误(使用make,gcc和gcc problemMatcher)

问题描述 投票:6回答:1

我在一个使用“make和gcc”编译所有模块的项目上工作。这些模块位于自己的文件夹中,并具有自己的Makefile。全局Makefile调用它们以编译二进制文件。

所以现在我尝试使用Visual Studio Code作为我的IDE。我已经设置了编译环境并且运行良好。

唯一的问题是,只要有一些警告/编译,点击它们就不会打开正确的文件。我的工作目录类似于下面显示的简化代码。

D:\SO
|-- common
|   |-- main.c
|   `-- Makefile
`-- Makefile

从任务我将调用外部Makefile,它将调用Makefile内部常见。而在main.c中,我故意删除了stdio.h头文件包含,这应该显示一个隐式声明错误。但是,当我单击问题窗口上的警告时,VS代码会抛出错误,表明找不到该文件。 VS Code尝试打开“D:\ SO \ main.c”,但文件实际上在“D:\ SO \ common \ main.c”中

enter image description here

外部Makefile

all:
    (cd common &&  make )

内部Makefile(公共目录内)

all:
    gcc main.c

main.c中

int main(int argc, char *argv[])
{
    printf("Hello World");
    return 0;
}

tasks.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "make",
            "command": "make",
            "type": "shell",
            "problemMatcher": [
                "$gcc"
            ]
        }
    ]
}

我试图通过为fileLocation参数提供不同的组合来调整problemMatcher。但他们没有产生适当的结果。所以我没有把它包括在内。

我在Windows 10 1607 x64上使用Visual Studio Code 1.14.2和mingw-gcc。

visual-studio-code vscode-settings vscode-tasks
1个回答
1
投票

这不是您的问题的答案,但我希望这将是Microsoft或其他人可以提供的任何解决方案的先决条件。

您的嵌套Makefile中有一个错误。你永远不应该在Makefile中做这个模式:

cd somewhere; make target

cd是不必要的(见下文),但直接使用make是一个问题。这种模式会使一次调用make的能力混乱,从而将信息传递给子品牌。特别是,它混淆了平行制作。它还使用当前的shell路径调用make,该路径可能不是最初使用的make。你应该总是使用this pattern instead

$(MAKE) -C somewhere target

-C dir参数告诉make在哪里设置其当前工作目录。使用$(MAKE)可以传递标志和参数。

由于这是推荐的嵌套-Makefile模式,我认为vscode用于确定适当的fileLocation的任何解析都可能需要它。

© www.soinside.com 2019 - 2024. All rights reserved.