E
eric
Dear advanced c++ programers:
I tried to copy and test a piece simple makefile code with
simple .cpp, .hpp code(s) which purpose is teach reader
how to use gnu make (especially on unix/linux) build (complex
application). That is the book (C++ Cookbook) chapter 1
example 1-2
1-3
1-20
1-22
1-23
1-24
-------------------------------------------------but it failed at
stage of make install (make TARGET=install)--------------
-------the following is after
make-------------------------------------------------------------------------------------------------------
eric@eric-laptop:~/cppcookbook/ch1$ ls
binaries georgeringo hellobeatles johnpaul Makefile
eric@eric-laptop:~/cppcookbook/ch1$ make TARGET=install
make --directory=johnpaul install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/johnpaul'
mkdir -p ../binaries
cp -p libjohnpaul.a ../binaries
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/johnpaul'
make --directory=georgeringo install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/georgeringo'
mkdir -p ../binaries
cp -p libgeorgeringo.so ../binaries
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/georgeringo'
make --directory=hellobeatles install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/hellobeatles'
mkdir -p ../binaries
cp -p hellobeatles ../binaries
cp: cannot stat `hellobeatles': No such file or directory
make[1]: *** [install] Error 1
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/hellobeatles'
make: *** [hellobeatles] Error 2
eric@eric-laptop:~/cppcookbook/ch1$
---------------------------------------------------------------------------------------------------------
--------This is Makefile in /
hellobeatles------------------------------------------------
--------------------------------------------------------------------------------------
# Specify the source files, target files, the build directories
# and the install idrectory
SOURCES = hellobeatles.cpp
OUTPUTFILE = hellobeatles
LIBJOHNPAUL = libjohnpaul.a
LIBGEORGERINGO = libgeorgeringo.so
JOHNPAULDIR = ../johnpaul
GEORGERINGODIR = ../georgeringo
INSTALLDIR = ../binaries
#
# Add the parent directory as an include path
#
CPPFLAGS += -I..
#
# Default target
#
..PHONY: all
all: $(HELLOBEATLES)
#
# Target to build the executable.
#
$(OUTPUTFILE): $(subst .cpp,.o,$(SOURCES)) \
$(JOHNPAULDIR)/$(LIBJOHNPAUL) \
$(GEORGERINGODIR)/$(LIBGEORGERINGO)
$(CXX) $(LDFLAGS) -o $@ $^
..PHONY: install
install:
mkdir -p $(INSTALLDIR)
cp -p $(OUTPUTFILE) $(INSTALLDIR)
..PHONY: clean
clean:
rm -f *.o
rm -f $(OUTPUTFILE)
# Generate dependencies of .cpp files on .hpp files
include $(subst .cpp,.d,$(SOURCES))
%.d: %.cpp
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
---------------------------------------------------------------------------------------
this is hellobeatles.cpp---------------------------------------
-----------------------------------------------
#include "johnpaul/johnpaul.hpp"
#include "georgeringo/georgeringo.hpp"
int main()
{
// Prints "John, Paul, George, and Ringo\n"
johnpaul();
georgeringo();
}
------------------------------------------------------------------------------
since my /hellobeatles directory after make, only produce
hellobeatles.d, but make TARGET=install demand
hellobeatles
which my directory don't have
the other examples codes mentioned in above(cpp,hpp,makefile) can be
found/download from
http://examples.oreilly.com/9780596007614/
or you have that book by yourself now.
I think mainly is Makefile in /hellobeatles cause error, but I have
no way(out of wit and experience) to fix it.
plz help
Eric
I tried to copy and test a piece simple makefile code with
simple .cpp, .hpp code(s) which purpose is teach reader
how to use gnu make (especially on unix/linux) build (complex
application). That is the book (C++ Cookbook) chapter 1
example 1-2
1-3
1-20
1-22
1-23
1-24
-------------------------------------------------but it failed at
stage of make install (make TARGET=install)--------------
-------the following is after
make-------------------------------------------------------------------------------------------------------
eric@eric-laptop:~/cppcookbook/ch1$ ls
binaries georgeringo hellobeatles johnpaul Makefile
eric@eric-laptop:~/cppcookbook/ch1$ make TARGET=install
make --directory=johnpaul install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/johnpaul'
mkdir -p ../binaries
cp -p libjohnpaul.a ../binaries
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/johnpaul'
make --directory=georgeringo install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/georgeringo'
mkdir -p ../binaries
cp -p libgeorgeringo.so ../binaries
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/georgeringo'
make --directory=hellobeatles install
make[1]: Entering directory `/home/eric/cppcookbook/ch1/hellobeatles'
mkdir -p ../binaries
cp -p hellobeatles ../binaries
cp: cannot stat `hellobeatles': No such file or directory
make[1]: *** [install] Error 1
make[1]: Leaving directory `/home/eric/cppcookbook/ch1/hellobeatles'
make: *** [hellobeatles] Error 2
eric@eric-laptop:~/cppcookbook/ch1$
---------------------------------------------------------------------------------------------------------
--------This is Makefile in /
hellobeatles------------------------------------------------
--------------------------------------------------------------------------------------
# Specify the source files, target files, the build directories
# and the install idrectory
SOURCES = hellobeatles.cpp
OUTPUTFILE = hellobeatles
LIBJOHNPAUL = libjohnpaul.a
LIBGEORGERINGO = libgeorgeringo.so
JOHNPAULDIR = ../johnpaul
GEORGERINGODIR = ../georgeringo
INSTALLDIR = ../binaries
#
# Add the parent directory as an include path
#
CPPFLAGS += -I..
#
# Default target
#
..PHONY: all
all: $(HELLOBEATLES)
#
# Target to build the executable.
#
$(OUTPUTFILE): $(subst .cpp,.o,$(SOURCES)) \
$(JOHNPAULDIR)/$(LIBJOHNPAUL) \
$(GEORGERINGODIR)/$(LIBGEORGERINGO)
$(CXX) $(LDFLAGS) -o $@ $^
..PHONY: install
install:
mkdir -p $(INSTALLDIR)
cp -p $(OUTPUTFILE) $(INSTALLDIR)
..PHONY: clean
clean:
rm -f *.o
rm -f $(OUTPUTFILE)
# Generate dependencies of .cpp files on .hpp files
include $(subst .cpp,.d,$(SOURCES))
%.d: %.cpp
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
---------------------------------------------------------------------------------------
this is hellobeatles.cpp---------------------------------------
-----------------------------------------------
#include "johnpaul/johnpaul.hpp"
#include "georgeringo/georgeringo.hpp"
int main()
{
// Prints "John, Paul, George, and Ringo\n"
johnpaul();
georgeringo();
}
------------------------------------------------------------------------------
since my /hellobeatles directory after make, only produce
hellobeatles.d, but make TARGET=install demand
hellobeatles
which my directory don't have
the other examples codes mentioned in above(cpp,hpp,makefile) can be
found/download from
http://examples.oreilly.com/9780596007614/
or you have that book by yourself now.
I think mainly is Makefile in /hellobeatles cause error, but I have
no way(out of wit and experience) to fix it.
plz help
Eric