Note that I’m using VS Code on Ubuntu 17.10 and using the GCC Compiler.
I’m having trouble building a simple program which makes use of additional .ccp files. I’m probably missing something obvious here as I’m fairly new to programming but I’ll explain what I’ve done so far. This is something that is stopping me from continuing with a tutorial I’m doing.
I have written a very simple program to demonstrate my point as follows.
main.ccp
#include <iostream> #include "Cat.h" using namespace std; int main () { speak(); return 0; }
Cat.h
#pragma once void speak();
Cat.ccp
#include <iostream> #include "Cat.h" using namespace std; void speak() { std::cout << "Meow!!" << std::endl; }
This simple program builds in both Codeblocks and Visual Studio Community 2017 no problem and I can’t figure out what I need to do to make it run. This error at the bottom indicates that the Cat.ccp file is not being picked up at all. If I was to drop the definition from this Cat.ccp into the header file the program compiles and runs fine but I need to make use of that .ccp file as I understand this is the accepted way of separating code. I’ll note that all the files are in the same folder too.
I understand that I may need to tell VS Code where to look for the Cat.ccp file but it’s strange to me that it finds the header in the same location. Nevertheless, after looking online I’ve been reading that I may need to place a directory into the c_cpp_intellisense_properties.json. Here’s what mine looks like.
{ "configurations": [ { "name": "Mac", "includePath": [ "/usr/include", "/usr/local/include", "${workspaceRoot}" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include", "/usr/local/include", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" }, "macFrameworkPath": [ "/System/Library/Frameworks", "/Library/Frameworks" ] }, { "name": "Linux", "includePath": [ "/usr/include/c++/7", "/usr/include/x86_64-linux-gnu/c++/7", "/usr/include/c++/7/backward", "/usr/lib/gcc/x86_64-linux-gnu/7/include", "/usr/local/include", "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed", "/usr/include/x86_64-linux-gnu", "/usr/include", "/home/danny/Documents/C++_Projects/24_-_Classes/Cat.cpp", "${workspaceRoot}", "/home/danny/Documents/C++_Projects/24_-_Classes/", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "/usr/include/c++/7", "/usr/include/x86_64-linux-gnu/c++/7", "/usr/include/c++/7/backward", "/usr/lib/gcc/x86_64-linux-gnu/7/include", "/usr/local/include", "/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed", "/usr/include/x86_64-linux-gnu", "/usr/include", "${workspaceRoot}", "/home/danny/Documents/C++_Projects/24_-_Classes/", "/home/danny/Documents/C++_Projects/24_-_Classes/.vscode/Cat.cpp" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } }, { "name": "Win32", "includePath": [ "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include", "${workspaceRoot}" ], "defines": [ "_DEBUG", "UNICODE" ], "intelliSenseMode": "msvc-x64", "browse": { "path": [ "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include/*", "${workspaceRoot}" ], "limitSymbolsToIncludedHeaders": true, "databaseFilename": "" } } ], "version": 3 }
At one point I wondered if I need to add a double command in there to tell the compiler to build both .ccp files in the tasks.json but I haven’t managed to figure out how to do that, or even if that’s the right approach.
tasks.json
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "label": "Build", "type": "shell", "command": "g++ -g /home/danny/Documents/C++_Projects/24_-_Classes/main.cpp -o Classes", "group": { "kind": "build", "isDefault": true }, "problemMatcher":"$gcc" } ] }
Appreciate any help. And just in case you’re wondering, the reason I don’t just finish the tutorial in Codeblocks or VS Community is that I like to know what’s going on under the hood in most things. Plus I’d like to get VS Code working for me as it’s been great so far.
Advertisement
Answer
in tasks.json:
"label": "g++.exe build active file", "args": [ "-g", "${fileDirname}\**.cpp", //"${fileDirname}\**.h", "-o", "${fileDirname}\${fileBasenameNoExtension}.exe", ],
in launch.json:
"preLaunchTask": "g++.exe build active file"
it will work if your sources are in separated folder