我正在为VS Code编写一个新的构建任务,用于编译C++代码。该任务涉及在Docker容器内部编译代码。例如:
这是我的
列出的路径是Docker容器中文件的绝对路径。当你在“问题”选项卡中单击其中一个文件时,它会尝试跳转到
我尝试了一些方法来解决这个问题,但似乎都不起作用。我尝试将
我也尝试了那个答案中的其他选项,但它们都不起作用。我还尝试创建一个文件夹之间的符号链接,通过运行
docker exec -it my_container make
这是我的
task.json
文件中的内容。{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "docker",
"args": [
"exec",
"-it",
"my_container",
"make"
],
"group": "build",
"presentation": {
"reveal": "always",
"panel": "dedicated"
},
"options": {
"cwd": "${workspaceRoot}"
},
"problemMatcher": {
"base": "$gcc",
"fileLocation": "absolute"
}
}
]
}
我能运行任务,一切都编译正确。然而,VS Code无法找到那些有编译错误的文件。这是因为一个的输出如下:
/host/my_project/src/my_file.cpp:105:46: error: passing 'const SomeClass' as 'this' argument discards qualifiers [-fpermissive]
列出的路径是Docker容器中文件的绝对路径。当你在“问题”选项卡中单击其中一个文件时,它会尝试跳转到
/host/my_project/src/my_file.cpp
,但该文件不存在。相反,该文件位于 /home/me/projects/my_project/src/my_file.cpp
中。我尝试了一些方法来解决这个问题,但似乎都不起作用。我尝试将
problemMatcher
更改为 文档 中概述的那个,并尝试使用一个不同的正则表达式来删除路径的绝对部分(例如,将 /host/my_project/src/my_file.cpp
转换为 /src/my_file.cpp
,并将 fileLocation 设置为 relative
)。然而,我对正则表达式不是很熟悉,无法正确地处理它。参考此处的一些正则表达式,我得出了以下结论。"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^[^/]/[^/]*/[^/]*/(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
我也尝试了那个答案中的其他选项,但它们都不起作用。我还尝试创建一个文件夹之间的符号链接,通过运行
ln -s /host ~/projects
。这也没有起作用,并且仍然尝试在Docker容器中打开文件。有人有什么建议吗?