我在一个项目上工作,它使用“make and 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](/image/5vMEf.jpg)
外部 Makefile
all:
(cd common && make )
内部 Makefile(在公共(public)目录内)
all:
gcc main.c
主程序
int main(int argc, char *argv[])
{
printf("Hello World");
return 0;
}
任务.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 参数提供不同的组合来调整问题匹配器。但它们没有产生正确的结果。所以我没有把它包括在这里。
我在带有 mingw-gcc 的 Windows 10 1607 x64 上使用 Visual Studio Code 1.14.2。
最佳答案
这不是您问题的答案,但我希望这将是 Microsoft 或其他人可以提供的任何解决方案的先决条件。
您的嵌套 Makefile 中有一个错误。你不应该在 Makefile 中使用这种模式:
cd somewhere; make target
cd
是不必要的(见下文),但使用 make
直接是个问题。这种模式破坏了一次调用 make 将信息传递给子 make 的能力。特别是,它弄乱了并行制作。它还调用 make
使用当前的 shell 路径,它可能不是 make
原来使用的那个。您应该始终使用 this pattern instead :$(MAKE) -C somewhere target
-C dir
参数告诉 make 在哪里设置它的当前工作目录。并使用 $(MAKE)
允许传递标志和参数。由于这是推荐的嵌套 Makefile 模式,我认为 vscode 会进行任何解析以确定适当的
fileLocation
可能需要它。
关于visual-studio-code - 单击问题窗口时,Visual Studio Code 上的 File not found 错误(使用 make、gcc 和 gcc problemMatcher),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594118/