I am developing a CGI program in C on Linux using gcc, GNU make and the SQLite library. How does my makefile look?
# Automatic Variables
# $@ file name of target
# $< name of the first prerequisite
# $? name of all prerequisites newer than target
# $^ names of all prerequisites
# Pattern rule example - complile object files from prerequisites
# %.o: %.c
# $(CC) -c $(CFLAGS) $< -o $@
#
# Predefined Variables
# CC compiler, default gcc
# CFLAGS compiler flags
# LDFLAGS linker flags such as -L (extra directories searched for -l)
# LDLIBS libaries such as -lfoo
CC=gcc
CFLAGS=-ansi -pedantic -Wall -Wextra -O2
LDLIBS=-ldl -lpthread
# directory of SQLite library
SQLITEDIR=sqlite
sqlfun.cgi: sqlfuncgi.o sqlite3.o
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
sqlite3.o: $(SQLITEDIR)/sqlite3.c
$(CC) -o $@ $^ -c -Os
sqlfuncgi.o: sqlfuncgi.c
$(CC) -o $@ $^ -c $(CFLAGS)
.PHONY: clean test
clean:
rm -f sqlfun.cgi *.o
test:
clear
cppcheck --enable=all --inconclusive --std=c89 sqlfuncgi.c
valgrind --leak-check=yes ./sqlfun.cgi test