Using G++ to Compile Multiple .Cpp and .H Files

Using G++ to compile multiple .cpp and .h files

list all the other cpp files after main.cpp.

ie

g++ main.cpp other.cpp etc.cpp

and so on.

Or you can compile them all individually. You then link all the resulting ".o" files together.

Compiling multiple .cpp and .h files using g++. Am I doing it right?

If you want to do it manually, you can compile all your .cpp files into object files

g++ -c *.cpp

and link all the object files

g++ *.o -o a.out

If ClassA.cpp is changed, you can just recompile ClassA.cpp

g++ -c ClassA.cpp

and link them all again

g++ *.o -o a.out

At least, you do not need to recompile the unchanged .cpp files.

how to compile multiple cpp files with main methods at once?

I'll start by stating I don't believe this question's tags are not exactly related to the problem at hand. The compilation one is the closest one but, even though, I consider the question to be more related to specific environment file selection and string manipulation than anything else.

Nonetheless there are several ways of doing it. It mostly comes down to the system in which you want to compile these files and the compilation environment, if any.

Basic options will involve Makefiles, Shell Scripting, for Linux environments, Batch Files and PowerShell for Windows environments, and so on.

Given the way the question was formulated I'll assume you're on a Linux system using Bash. A simple solution for that would involve a few commonly-distributed tools (you can find out more about each of them on their man pages):

  • for
  • echo
  • awk

Assuming you're running the commands in the same folder the source files are located, the following line should do the trick for you:

for f in *.cpp; do g++ -o $(echo $f | awk -F.cpp '{printf "%s", $1}') $f; done

What the line above is doing is:

  • for f in *.cpp - iterates over all files in the current directory that match the provided wildcard. On each iteration the file name is stored at the $f variable
  • echo $f | awk -F.cpp '{printf "%s", $1}' - this snippet removes the .cpp extension from the file name we've got

Edit note: the proposed solution was improved by removing the parsing over ls -l's result because of @clcto's reference in this answer's comments.

C++ compiling different .cpp files including them in the header file [duplicate]

Generally it is a bad idea to have an implementation in the header file.
if you include tezt.h file in different files in the same project it may have compilation error, with multiple definitions for the same symbol.

How can I compile c++ to multiple files?

As suggested in the comments by @RSahu

Shared Libraries (.so files) is the way to split your compiled code.

here is a small example:

https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html

Use g++ or CC to compile multiple C++ files

You need to add the following to the different files...

Top of Rectangle.cc

#include "Shape.cc"

Top of ShapeDriver.cc

#include "Rectangle.cc"

Also, in your third gcc line, you have a typo

g++ ShapeDriver.cc Shape.cc Rectangle.ccc - This creates an error

It should have been Rectangle.cc

What your problem is, is that in each of your files, the different classes have never been defined, so they don't know how to use them. Like.... "Rectangle" first needs to know what a "Shape" is before it derives from it. You should be using .h files in between w/ the class definitions, and including them in the other .cc files so they know the other class structures they are calling on.

how would I compile multiple files in a folder? [duplicate]

Using cmake

You can either write a makefile, which would contain all the files to be compiled in a folder or for a better management you can use cmake to compile all the files into a library and use them again. By using cmake you can efficiently maintain and build a huge code base.

Lets say, your Main directory has the main.cpp file and inside it has a src folder which has all other files to be compiled ,

Then You can create a CMakeLists.txt file with following contents

set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -std=c++14 ")
add_subdirectory(src)
add_executable(main main.cpp)
target_link_libraries(main compiledLibrariesfrmSrcFolder)

Then Navigate inside your src directory to create one more CMakeLists.txt. This will control all the files that you need to compileand add to your main program.

add_library(compiledLibrariesfrmSrcFolder STATIC
a.cpp
b.cpp
c.cpp
d.cpp)

Else, you could also use GLOB_RECURSE to add all the .cpp files in that subdirectory

Once this is done, then you could create a new folder in your home directory and run the following
mkdir build

cd build
cmake ../
make

This compiles and generates your executable in the build folder.

Note : Just to elaborate more, The main reason to do this inside a build is because cmake creates lots of temp files during the process, To isolate them from your main code you will do the build inside the build directory.

cmake ../ , Here the cmake accepts a parameter which is the location of the main CMakeLists.txt file. In our case it will be a directory before build. This creates the MakeFile which has instructions to compile and link all the other necessary files.

make compiles and links the files and generates the executables.



Related Topics



Leave a reply



Submit