#c #c #visual-studio-code #vscode-tasks
Вопрос:
В частности, я хотел бы, чтобы одно сочетание клавиш создавало исполняемый файл с правильной командой компиляции и флагами, независимо от того, является ли исходный файл a .c
или a .cpp
.
Например, мой текущий файл задач, который компилирует .cpp
файлы, выглядит следующим образом:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C : g -9 build active file",
"command": "/usr/bin/g ",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
]
}
Я заметил , что если я изменюсь "commands"
на "/usr/bin/gcc"
, он сможет компилировать файлы .c.
Итак, что я хочу, чтобы мой файл задач выполнял:
- Извлеките расширение (
.c
или.cpp
) файла, на основе которого я создаю. - Установите переменную, которой будет присвоено значение
"command"
. - Условно измените эту переменную на
"/usr/bin/gcc"
или"/usr/bin/g "
на основе извлеченного расширения.
Возможно ли все это? У вас есть лучшее предложение для достижения такого рода условного построения?
Спасибо!
Комментарии:
1. Вы можете добавить a
languageid==cpp
в предложение where привязки ключей и запустить именованную задачу в качестве привязанной команды
Ответ №1:
Вы можете использовать переменную команды расширения.
Используйте команду: extension.commandvariable.file.fileAsKey
Порядок расширений важен.
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C : g build active file",
"command": "${input:pickCompiler}",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
...
...
}
],
"inputs": [
{
"id": "pickCompiler",
"type": "command",
"command": "extension.commandvariable.file.fileAsKey",
"args": {
".cpp": "/usr/bin/g ",
".c": "/usr/bin/gcc"
}
}
]
}
Комментарии:
1. Спасибо! Кажется, это несколько приблизило меня (после изменения pickCompiler на PickCompiler), но теперь я получаю расширение «command». файл с переменными командами. Файловый ключ «не найден» сообщение при попытке сборки.
2. @Benjamin Вы прочитали первую строку ответа? Я исправлю опечатку
3. О, ты прав! Я новичок во всем этом. После установки расширения я теперь получаю следующую ошибку компиляции: «${input:PickCompiler} -g /..path../name.cpp -o /..путь../имя /bin/sh: 1: Плохая замена». Я получаю это как для .c, так и для .cpp
4. @Benjamin Каков ваш текущий
tasks.json
контент, отредактируйте свой вопрос