> On Fri, Oct 17, 2014 at 1:51 PM, Paul Smith <[email protected]> wrote:
> > If you provide us the output of the make command we can be more helpful.

On Sat, 2014-10-18 at 07:48 +0100, Amit Chaudhuri wrote:
> amit@linux-erag:~/prog/cpp/test> make -n
> g++    -c -o main.o main.cpp
> cc   main.o   -o main

This is all I asked for, and all we needed to see.

Here it's clear that make DOES use "g++" to compile your C++ file into
a .o file, because make can see that in order to build a .cpp file into
a .o file it needs to use a C++ compiler.

However the next step, to turn a .o file into an executable, can be done
in any of a large number of ways.  The .o file could be generated from a
C compiler, C++ compiler, FORTRAN compiler, or various other types of
compilers.  Since make can choose only one by default it chooses to use
the C linker.

There are various solutions depending on your situation.  If you really
only have one source file and that's all you'll ever have, you can
change your makefile like this:

    main: main.cpp

(have the executable depend on the source file not the object file).
Now make can guess that it needs to use the C++ compiler and linker
since it's doing things in one step.  And since you only have one file
to compile anyway you're not losing any efficiency.

If you have more than one source file, you should either change the
built-in LINK.o variable to use the C++ compiler:

    LINK.o = $(CXX) $(LDFLAGS) $(TARGET_ARCH)

    main: main.o foo.o bar.o baz.o

Or else write the link command explicitly:

    main: main.o foo.o bar.o baz.o
            $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $^ $(LDLIBS)


_______________________________________________
Help-make mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-make

Reply via email to