tasks.json
最近的更改似乎为列出的每个任务提供了一个可用的命令。请参见https://code.visualstudio.com/docs/editor/tasks,这使得很多内容都没有意义了。
原本的答案旨在提供更复杂的解决方案,但已接受的答案中呈现的简单shell运行器任务格式更加有用。请看下面的内容了解其样式。
在这里的限制是VS Code对于给定工作区只允许一个高级别构建任务/命令。允许使用多个子任务,但它们受限于使用顶层“command”,但可以提供不同的“arguments”。这非常适合使用类似于make、ant或msbuild的构建系统的环境。例如:
{
"version": "0.1.0",
"command": "make",
"tasks" : [
{
"taskName": "clean",
"suppressTaskName": false,
"args": ["${file}"]
},
{
"taskName": "install"
}
]
}
有两种选择;
-- the shell file would be a simple
"$@"
-- the tasks.json
"args": ["clang++", "-std=c++14", "-O2", "${file}"]
运行可执行文件(./a.out
)需要更多的努力。简单地将其添加为参数并不起作用,如果存在,则需要 shell 脚本来执行它。
{
"version": "0.1.0",
"isShellCommand": true,
"taskName": "generic build",
"showOutput": "always",
"args": ["${fileExtname}", "${file}"]
"command": "./.vscode/compileme.sh", // expected in the "local settings" folder
//"command": "~/compileme.sh", // if in HOME folder
}
还有编译脚本,compileme.sh;
echo "compilation being executed with the arguments;"
echo "$@"
filetype=$1
file=$2
if [ $filetype = ".cpp" -o $filetype = ".cxx" ] ; then
clang++ -std=c++14 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".c" ]
then
clang -std=c11 -Wall -Wextra -pedantic -pthread $file && ./a.out
elif [ $filetype = ".sh" ]
then
$file
elif [ $filetype = ".py" ]
then
python $file
else
echo "file type not supported..."
exit 1
fi
在上述选项中,第二个选项更可取。这个实现适用于OS X,但可以根据需要轻松移植到Linux和Windows。我会继续关注此事,并尝试跟踪VS Code构建任务的更改,基于文件的构建或多个命令的支持可能是一个受欢迎的补充。
我的tasks.json支持几个运行器,并且默认情况下构建会打印消息作为提醒。它使用shell作为运行器,现在看起来像...
{
"version": "0.1.0",
"isShellCommand": true,
"taskName": "GenericBuild",
"showOutput": "always",
"command": "sh",
"suppressTaskName": false,
"args": ["-c"],
"tasks": [
{
"taskName": "no build",
"suppressTaskName": true,
"isBuildCommand": true,
"args": [
"echo There is no default build task, run a task by name..."
]
},
{
"taskName": "cpp",
"suppressTaskName": true,
"args": [
"clang++ -std=c++14 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
},
{
"taskName": "shell",
"suppressTaskName": true,
"args": [
"\"${file}\""
]
},
{
"taskName": "python",
"suppressTaskName": true,
"args": [
"python \"${file}\""
]
},
{
"taskName": "c",
"suppressTaskName": true,
"args": [
"clang -std=c11 -Wall -Wextra -pedantic -pthread \"${file}\" && ./a.out"
]
}
]
}