Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VS Code will not build c++ programs with multiple .ccp source files

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.

like image 429
Danny Hepple Avatar asked Dec 06 '17 02:12

Danny Hepple


People also ask

How do I run multiple C files in Visual Studio Code?

Since Visual Studio Code doesn't have an easy way of compiling multiple files together we will install a new extension called C/C++ Makefile Project. This extension will help generate a makefile for our project and allow us to compile multiple source files together very easily no matter home many we have.

Does VS Code work with C?

C/C++ support for Visual Studio Code is provided by a Microsoft C/C++ extension to enable cross-platform C and C++ development on Windows, Linux, and macOS.


2 Answers

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

like image 147
Anns98 Avatar answered Oct 04 '22 02:10

Anns98


feeling lazy,

This is tasks.json of vscode for linux distros, to compile multiple cpp files.

{ "version": "2.0.0", "tasks": [     {         "type": "shell",         "label": "C/C++: 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         }     } ] 

}

like image 39
kzs Avatar answered Oct 04 '22 00:10

kzs