The `clean` doesn't appear to serve a purpose. Make already does dependency tracking, so if files are out of date they will be rebuilt. The `clean` rule does however cause problems when the test executable already exists. In that case it will delete outputs, including the test executable, and then fail. By the time the test executable was deleted, it was already determined that it was up to date, and so does not get rebuilt. You end up having to run the command twice, each time seesawing between deleting outputs or generating outputs and running the tests.
76 lines
1.9 KiB
Makefile
76 lines
1.9 KiB
Makefile
# For GNU conventions and targets see https://www.gnu.org/prep/standards/standards.html
|
|
# Using GNU standards makes it easier for some users to keep doing what they are used to.
|
|
|
|
# 'mkdir -p' is non-portable, but it is widely supported. A portable solution
|
|
# is elusive due to race conditions on testing the directory and creating it.
|
|
# Anemic toolchain users can sidestep the problem using MKDIR="mkdir".
|
|
|
|
AR = ar
|
|
ARFLAGS = cr
|
|
RM = rm -f
|
|
RANLIB = ranlib
|
|
MKDIR = mkdir -p
|
|
CXXFLAGS = -fPIC
|
|
|
|
INSTALL = install
|
|
INSTALL_PROGRAM = $(INSTALL)
|
|
INSTALL_DATA = $(INSTALL) -m 644
|
|
|
|
prefix = /usr/local
|
|
bindir = $(prefix)/bin
|
|
libdir = $(prefix)/lib
|
|
includedir = $(prefix)/include
|
|
|
|
all: xmltest staticlib
|
|
|
|
rebuild: clean all
|
|
|
|
xmltest: xmltest.cpp libtinyxml2.a
|
|
|
|
effc:
|
|
gcc -Werror -Wall -Wextra -Wshadow -Wpedantic -Wformat-nonliteral \
|
|
-Wformat-security -Wswitch-default -Wuninitialized -Wundef \
|
|
-Wpointer-arith -Woverloaded-virtual -Wctor-dtor-privacy \
|
|
-Wnon-virtual-dtor -Woverloaded-virtual -Wsign-promo \
|
|
-Wno-unused-parameter -Weffc++ xmltest.cpp tinyxml2.cpp -o xmltest
|
|
|
|
clean:
|
|
-$(RM) *.o xmltest libtinyxml2.a
|
|
|
|
# Standard GNU target
|
|
distclean:
|
|
-$(RM) *.o xmltest libtinyxml2.a
|
|
|
|
test: xmltest
|
|
./xmltest
|
|
|
|
# Standard GNU target
|
|
check: xmltest
|
|
./xmltest
|
|
|
|
staticlib: libtinyxml2.a
|
|
|
|
libtinyxml2.a: tinyxml2.o
|
|
$(AR) $(ARFLAGS) $@ $^
|
|
$(RANLIB) $@
|
|
|
|
tinyxml2.o: tinyxml2.cpp tinyxml2.h
|
|
|
|
directories:
|
|
$(MKDIR) $(DESTDIR)$(prefix)
|
|
$(MKDIR) $(DESTDIR)$(bindir)
|
|
$(MKDIR) $(DESTDIR)$(libdir)
|
|
$(MKDIR) $(DESTDIR)$(includedir)
|
|
|
|
# Standard GNU target.
|
|
install: xmltest staticlib directories
|
|
$(INSTALL_PROGRAM) xmltest $(DESTDIR)$(bindir)/xmltest
|
|
$(INSTALL_DATA) tinyxml2.h $(DESTDIR)$(includedir)/tinyxml2.h
|
|
$(INSTALL_DATA) libtinyxml2.a $(DESTDIR)$(libdir)/libtinyxml2.a
|
|
|
|
# Standard GNU target
|
|
uninstall:
|
|
$(RM) $(DESTDIR)$(bindir)/xmltest
|
|
$(RM) $(DESTDIR)$(includedir)/tinyxml2.h
|
|
$(RM) $(DESTDIR)$(libdir)/libtinyxml2.a
|