'VS Code C++ compile multiple file
I am learning C++ and I want to use VS Code as my code editor. I created a simple project that has a file with the main method and 2 other files to define a class (a .h and a .cpp). I created the default build task in VS Code to compile my code (g++ build active file), only to get a compile error: undefined reference for the class constructor. I saw that it was related to the linker not finding the implementation because it wasn't included in the build. So I modified my build task to build all .cpp :
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g",
"${fileDirname}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "/usr/bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
But now when I build the project, I get this error: /path/to/project/*.cpp": No such file or directory. Meaning that *.cpp wasn't interpreted as a wildcard. I am using the default C++ extension for VS Code if is relevant. Am I missing some configuration in my task? How can I make this work? For a large project the method in which I manually add all cpp files as arguments is obviously not appropriate so I would like to make this method to work. Thanks in advace!
Solution 1:[1]
This is a tough question to deal with because everyone's computers have different programs, files etc... For reference, I am on windows 10.
This worked for me and it's worth trying...
in tasks.json, either add a new task or modify the existing one to look as follows:
{
"label": "g++.exe build active file",
"args": [
"-g",
"${fileDirname}\\*.cpp",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
],
"command": "g++.exe",
"options": {
"cwd": "${workspaceFolder}",
},
"group": "build",
"type": "shell"
}
Make a new file under .vscode called c_cpp_properties.json: The following may be different if you are using another compiler or OS
{
"configurations": [
{
"name": "Win32",
"includePath": [
"C:\\msys64\\mingw64\\include\\c++",
"C:\\msys64\\mingw64\\lib\\gcc\\x86_64-w64-mingw32\\11.2.0\\include", "${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe",
"cStandard": "c11",
"cppStandard": "c++20",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
Now in launch.json, you need to change the "preLaunchTask" to match the task's name we just created in tasks.json. This will tell vscode to first compile/build the program... then to run it:
Mine now looks like this:
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"
}
]
}
Note that the name we chose is not exactly describing what the new task actually does, feel free to change it, but if you do... make sure to update both the "label" in tasks.json and "preLaunchTask" in launch.json to be identical.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | A Pars |
