इस उत्तर मूल रूप से एक अधिक जटिल समाधान करने के उद्देश्य से किया गया था की तरह लग रहे हैं, लेकिन उसे स्वीकार जवाब में प्रस्तुत के रूप में सरल खोल धावक कार्य प्रारूप अधिक उपयोगी साबित कर दिया। जो दिखता है उसके लिए नीचे देखें।
यहाँ सीमा यह है कि वी.एस. कोड दिए गए कार्यक्षेत्र के लिए एक उच्च स्तर का निर्माण कार्य/आदेश तक ही सीमित रहा है। एकाधिक उप-कार्यों की अनुमति है, लेकिन वे शीर्ष स्तर "कमांड" का उपयोग करने के लिए सीमित हैं लेकिन विभिन्न "तर्क" प्रदान कर सकते हैं। यह ऐसे वातावरण के लिए उपयुक्त होगा जो बनाने, एंटी या एमएसबिल्ड जैसी बिल्ड सिस्टम का उपयोग करता है। उदा .;
{
"version": "0.1.0",
"command": "make", // command must appear here
"tasks" : [
{
"taskName": "clean",
"suppressTaskName": false, // false by default
//"command": "somethingelse", // not valid here
"args": ["${file}"] // if required
},
{
"taskName": "install"
// ...
}
]
}
दो विकल्प उपलब्ध हैं;
संकलन/निष्पादन को पूरी तरह से task.json में दिए गए तर्कों को चलाने के लिए एक कस्टम स्क्रिप्ट प्रयास है।
-- the shell file would be a simple
"[email protected]" # run what I get
-- the tasks.json
"args": ["clang++", "-std=c++14", "-O2", "${file}"]
चलाने के लिए exectuable हो रही है (./a.out
) अधिक प्रयास था। बस इसे एक तर्क के रूप में जोड़ना काम नहीं करता था, अगर वहां था तो शेल स्क्रिप्ट को इसे निष्पादित करने की आवश्यकता थी।
फाइल एक्सटेंशन और फ़ाइल नाम के बाद स्विचिंग को आउटपुट के आउटपुट को निष्पादित करना और कस्टम स्क्रिप्ट में निष्पादन करना। यह लागू करने के लिए आसान साबित हुआ और खोल स्क्रिप्ट में अधिक नियंत्रण की पेशकश की।
{
"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
}
और खोल स्क्रिप्ट, संकलन।श;
#!/bin/sh
# basic error checking not shown...
echo "compilation being executed with the arguments;"
echo "[email protected]"
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
विकल्प ऊपर सूचीबद्ध को देखते हुए, दूसरा विकल्प बेहतर है। यह कार्यान्वयन ओएस एक्स पर काम करता है, लेकिन इसे आसानी से लिनक्स और विंडोज़ में आसानी से पोर्ट किया जा सकता है। मैं इस पर नजर रखूंगा और वीएस कोड बिल्ड कार्यों में परिवर्तनों को ट्रैक करने का प्रयास करूंगा, फाइल आधारित बिल्ड या एकाधिक कमांड के लिए समर्थन एक स्वागत अतिरिक्त हो सकता है।
मेरा tasks.json कुछ धावकों का समर्थन करता है, और निर्माण के लिए एक डिफ़ॉल्ट जो एक अनुस्मारक के रूप में संदेश प्रिंट करता है। यह धावक के रूप में खोल का उपयोग करता है और अब की तरह दिखता है ...
{
"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"
]
}
]
}
मैं इस पर वापस आ गया हूं और मुझे वास्तव में कमांड धावक के रूप में 'bash -c' का उपयोग करने का विचार पसंद है। यह मुझे काफी अच्छी तरह से उपयुक्त बनाता है। – Niall
मैंने एक सरल सी ++ प्रोग्राम संकलित करने के लिए उपर्युक्त उल्लेख का एक संस्करण बनाया है। दुर्भाग्य से मैं इसे एक टिप्पणी में पेस्ट नहीं कर सकता।हालांकि मुझे पता है कि कार्य का आउटपुट आउटपुट फलक में नहीं दिखाया गया है। उदाहरण के लिए यदि मेरा कार्य "bash -c helloworld" निष्पादित करता है तो आउटपुट फलक में कोई "हैलो वर्ल्ड" दिखाई नहीं दे रहा है। यह पता लगाने की कोशिश कर रहा है कि अभी यह कैसे करें। – andrea
और यही वह है जिसे मैंने समझाया: https://github.com/ataiya/hellovsc किसी कारण से नोटिस मैं कंप्यूटर/रन आउटपुट _only_ देख सकता हूं जब मैं "echoCommand" करता हूं: झूठी, जो विशेष रूप से काउंटर- सहज ज्ञान युक्त! यह भी बहुत भयानक है कि आपको कोई जानकारी नहीं है जब कार्य निष्पादित हो गया है। – andrea