我在VSCode中配置了一个任务来编译Delphi 2005 dpk。它正在工作并返回“问题视图”上的错误,但它没有显示文件中的错误。
我认为它正在发生,因为当我点击错误时,我收到错误消息:
无法打开'sr075pro.pas':找不到文件 (... projectfolder \ sr075pro.pas)
但该文件位于...projectfolder\webservices\sr075pro.pas
。
我找不到告诉任务该文件在子文件夹中的方法。我尝试在“fileLocation”标签上使用“relative”选项而没有成功。
返回错误:
Compiling sa_webservices...
Borland Delphi Version 13.0 Copyright (c) 1983,99 Inprise Corporation
sr075pro.pas(99) Error: Undeclared identifier: 'ni'
sa_webservices.dpk(802) Fatal: Could not compile used unit 'sr075pro.pas'
我的任务配置:
{
"version": "0.1.0",
"name": "Compilar",
"command": "C:\\Compilers\\compile.bat",
"suppressTaskName": true,
"isShellCommand": true,
"isBuildCommand": true,
"tasks": [
{
"taskName": "Compile sa_webservices",
"isBuildCommand": false,
"isTestCommand": false,
"showOutput": "always",
"args": [
"sa_webservices"
],
"problemMatcher": {
"owner": "external",
"fileLocation": "relative",
"pattern": {
"regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
"file": 1,
"line": 3,
"message": 5
}
}
}
我的compile.bat:
@echo off
@P:
@set arg1=%1
shift
...
if "%arg1%" == "sa_webservices" set arg2="webservices"
...
echo Compiling %arg1%...
cd\%arg2%
dcc32.exe -H -W -Q %arg1%.dpk
答案 0 :(得分:1)
您的任务配置错误。首先,你不要关闭所有括号,但我想这是通过在StackOverflow上复制和粘贴它而犯的错误。否则,任务配置根本不起作用。
现在来到真正的问题: DCC32生成包含相对文件路径的提示和警告。这些路径相对于项目文件 。在任务配置中,通过设置
定义编译器的输出以包含相对路径"fileLocation": "relative"
Visual Studio Code不知道如何根据编译器消息给出的相对路径构建正确的绝对路径。因此,它会猜测您当前的${workspaceRoot}
(在您的情况下,它是projectfolder
)将是绝对路径。
这解释了为什么您会看到包含错误文件路径的错误和警告。为了获得正确的路径,您需要告诉VSCode 正确的路径以组合相对路径。
只需在fileLocation
中添加tasks.json
条目的正确路径即可实现此目的:
"fileLocation": ["relative", "${workspaceRoot}\\webservices"]
整个 tasks.json 看起来像这样:
{
"version": "0.1.0",
"name": "Compilar",
"command": "C:\\Compilers\\compile.bat",
"suppressTaskName": true,
"isShellCommand": true,
"isBuildCommand": true,
"tasks": [
{
"taskName": "Compile sa_webservices",
"isBuildCommand": false,
"isTestCommand": false,
"showOutput": "always",
"args": [
"sa_webservices"
],
"problemMatcher": {
"owner": "external",
"fileLocation": ["relative", "${workspaceRoot}\\webservices"],
"pattern": {
"regexp": "^([\\w]+\\.(pas|dpr|dpk))\\((\\d+)\\)\\s(Fatal|Error|Warning|Hint):(.*)",
"file": 1,
"line": 3,
"message": 5
}
}
}
]
}