Makefiles are a simple way to organize code compilation. Make is a Unix tool to simplify building program executables from many modules. make reads in rules (specified as a list of target entries) from a user created Makefile. make will only re-build things that need to be re-built (object or executables that depend on files that have been modified since the last time the objects or executables were built).
The following code snippet is an example of a makefile + makefile.conf. You can find the source code as well as some examples here.
(info - Makefile.conf loaded) # find project files H_FILES :=
(shell find ./ -name '*.c' -type f | sed 's/ /\\ /g' | uniq) CXX_FILES :=
(C_FILES:.c=.o) O_FILES +=
(notdir
(notdir
(notdir
(H_FILES:%=-I%)
(DEBUG),yes)
(CFLAGS) endif ifeq (
(info - Set Parameters for Shared Library build process) ALL_PARAMETERS = lib
(PROJECT_VERSION) clean ALL_TYPE = lib
(PROJECT_VERSION):
(PROJECT_NAME).so CFLAGS := -fPIC
(CXXFLAGS) else
(PROJECT_NAME) clean ALL_TYPE =
(O_FILES) LIBFLAGS = endif # Build Process all:
(ALL_TYPE) @echo - [OUTPUT][CXX]
(BIN_DIRECTORY)] @
(CFLAGS)
(LDFLAGS)
(BIN_DIRECTORY)/
^
@ @
(CFLAGS) -c
@
(LFLAGS) %.o: %.cpp @echo - [CXX]
(CXX)
(INCLUDES) -o
<
(info - Remove all .o [object] files) @find . -name \*.o -type f -delete # Clear Objects & Executables cleanall:
(info - Remove all files in
(BIN_DIRECTORY) -name \*.* -type f -delete
# Project Configurations # Project Name PROJECT_NAME = sharedtest # Project Version PROJECT_VERSION = 0.1 # Program or Shared Library IS_LIBRARY = yes # Source Files Directory SRC_DIRECTORY = src # Header Files Directory INC_DIRECTORY = inc # Library Header Files Directory LIB_DIRECTORY = lib # Build Output Directory BIN_DIRECTORY = ../Executable # Installation Directory Exec INS_DIRECTORY = /usr/bin/ # Installation Directory Headers INS_HEARERS_DIRECTORY = /usr/include/ # Installation Directory SO INS_SO_DIRECTORY = /usr/lib/ # C Flags CFLAGS = -O3 -D_GNU_SOURCE -Wfatal-errors # C++ Flags CXXFLAGS =(shell dpkg-buildflags --get LDFLAGS) # Linker Libraries LDLIBS = -fno-inline # Debug Yes / No DEBUG = no # C Compiler CC = gcc # C++ Compiler CXX = g++