-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
executable file
·179 lines (149 loc) · 6.09 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
############################################################################
#
# Another Programmer's Editor Makefile Template
#
# This is a template Makefile for a simple program.
# It is meant to serve as a starting point for creating a portable
# Makefile, suitable for use under ports systems like *BSD ports,
# MacPorts, Gentoo Portage, etc.
#
# The goal is a Makefile that can be used without modifications
# on any Unix-compatible system.
#
# Variables that are conditionally assigned (with ?=) can be overridden
# by the environment or via the command line as follows:
#
# make VAR=value
#
# For example, MacPorts installs to /opt/local instead of the default
# ../local, and hence might use the following:
#
# make PREFIX=/opt/local
#
# Different systems may also use different compilers and keep libraries in
# different locations:
#
# make CC=gcc CFLAGS=-O2 LDFLAGS="-L/usr/X11R6 -lX11"
#
# Variables can also inheret values from parent Makefiles (as in *BSD ports).
#
# Lastly, they can be overridden by the environment, e.g.
#
# setenv CFLAGS "-O -Wall -pipe" # C-shell and derivatives
# export CFLAGS="-O -Wall -pipe" # Bourne-shell and derivatives
# make
#
# All these override methods allow the Makefile to respect the environment
# in which it is used.
#
# You can append values to variables within this Makefile (with +=).
# However, this should not be used to add compiler-specific flags like
# -Wall, as this would disrespect the environment.
#
# History:
# Date Name Modification
# 2021-08-21 Jason Bacon Begin
############################################################################
############################################################################
# Installed targets
BIN = endian
############################################################################
# Compile, link, and install options
# Install in ../local, unless defined by the parent Makefile, the
# environment, or a command line option such as PREFIX=/opt/local.
# FreeBSD ports sets this to /usr/local, MacPorts to /opt/local, etc.
PREFIX ?= ../local
# Where to find local libraries and headers. If you want to use libraries
# from outside ${PREFIX} (not usually recommended), you can set this
# independently.
LOCALBASE ?= ${PREFIX}
# Allow caller to override either MANPREFIX or MANDIR
MANPREFIX ?= ${PREFIX}
MANDIR ?= ${MANPREFIX}/man
############################################################################
# Build flags
# Override with "make CC=gcc", "make CC=icc", etc.
# Do not add non-portable options (such as -Wall) using +=
# Make sure all compilers are part of the same toolchain. Do not mix
# compilers from different vendors or different compiler versions unless
# you know what you're doing.
# Defaults that should work with GCC and Clang.
CC ?= cc
CFLAGS ?= -Wall -g -O
# Link command:
# Use ${FC} to link when mixing C and Fortran
# Use ${CXX} to link when mixing C and C++
# When mixing C++ and Fortran, use ${FC} and -lstdc++ or ${CXX} and -lgfortran
LD = ${CC}
CPP ?= cpp
AR ?= ar
RANLIB ?= ranlib
INCLUDES += -isystem ${LOCALBASE}/include
CFLAGS += ${INCLUDES}
CXXFLAGS += ${INCLUDES}
FFLAGS += ${INCLUDES}
LDFLAGS += -L${LOCALBASE}/lib
############################################################################
# Assume first command in PATH. Override with full pathnames if necessary.
# E.g. "make INSTALL=/usr/local/bin/ginstall"
# Do not place flags here (e.g. RM = rm -f). Just provide the command
# and let flags be specified separately.
CP ?= cp
MV ?= mv
MKDIR ?= mkdir
LN ?= ln
RM ?= rm
# No full pathnames for these. Allow PATH to dtermine which one is used
# in case a locally installed version is preferred.
PRINTF ?= printf
INSTALL ?= install
STRIP ?= strip
############################################################################
# Standard targets required by package managers
.PHONY: all clean realclean install install-strip help
all: ${BIN}
endian: endian.c
${CC} -o ${BIN} ${CFLAGS} endian.c ${LDFLAGS}
############################################################################
# Include dependencies generated by "make depend", if they exist.
# These rules explicitly list dependencies for each object file.
# See "depend" target below. If Makefile.depend does not exist, use
# generic source compile rules. These have some limitations, so you
# may prefer to create explicit rules for each target file. This can
# be done automatically using "cpp -M" or "cpp -MM". Run "man cpp"
# for more information, or see the "depend" target below.
# Rules generated by "make depend"
# If Makefile.depend does not exist, "touch" it before running "make depend"
# include Makefile.depend
############################################################################
# Self-generate dependencies the old-fashioned way
# Edit filespec and compiler command if not using just C source files
depend:
rm -f Makefile.depend
for file in *.c; do \
${CC} ${INCLUDES} -MM $${file} >> Makefile.depend; \
${PRINTF} "\t\$${CC} -c \$${CFLAGS} $${file}\n\n" >> Makefile.depend; \
done
############################################################################
# Remove generated files (objs and nroff output from man pages)
clean:
rm -f ${OBJS} ${BIN} *.nr
rm -rf *.dSYM
# Keep backup files during normal clean, but provide an option to remove them
realclean: clean
rm -f .*.bak *.bak *.BAK *.gmon core *.core
############################################################################
# Install all target files (binaries, libraries, docs, etc.)
install: all
@echo "Nothing to install."
help:
@printf "Usage: make [VARIABLE=value ...] all\n\n"
@printf "Some common tunable variables:\n\n"
@printf "\tCC [currently ${CC}]\n"
@printf "\tCFLAGS [currently ${CFLAGS}]\n"
@printf "\tCXX [currently ${CXX}]\n"
@printf "\tCXXFLAGS [currently ${CXXFLAGS}]\n"
@printf "\tF77 [currently ${F77}]\n"
@printf "\tFC [currently ${FC}]\n"
@printf "\tFFLAGS [currently ${FFLAGS}]\n\n"
@printf "View Makefile for more tunable variables.\n\n"