66 lines
1.6 KiB
Makefile
66 lines
1.6 KiB
Makefile
# documentation here
|
|
# https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
|
|
# http://www.partow.net/programming/makefile/index.html
|
|
|
|
CXX = gcc
|
|
GCXX_DEBUG = -ggdb3 -DDEBUG -g -fstack-protector-all -Wstack-protector -fno-omit-frame-pointer
|
|
CFLAGS = -pedantic-errors -Wall -Wextra --std=gnu18 # -Werror
|
|
LDFLAGS = # $(shell pkg-config --libs libcrypto jsoncpp)
|
|
INCLUDE = -Iinclude/
|
|
|
|
# path #
|
|
BIN_DIR = ./bin
|
|
OBJ_DIR = ./obj
|
|
SRC_DIR = ./src
|
|
SRC_EXT = .c
|
|
TARGET = out.ex
|
|
|
|
# code lists #
|
|
# List all source files in the source directory
|
|
SRC := \
|
|
$(wildcard $(SRC_DIR)/module1/*$(SRC_EXT)) \
|
|
$(wildcard $(SRC_DIR)/*$(SRC_EXT)) \
|
|
|
|
# Set the object file names, with the source directory stripped
|
|
# from the path, and the build path prepended in its place
|
|
OBJECTS = $(SRC:$(SRC_DIR)/%.$(SRC_EXT)=$(OBJ_DIR)/%.o)
|
|
|
|
all: $(BIN_DIR)/$(TARGET)
|
|
|
|
$(OBJ_DIR)/%.o: %$(SRC_EXT)
|
|
$(CXX) $(CFLAGS) $(INCLUDE) -c $< -o $@ $(LDFLAGS)
|
|
|
|
$(BIN_DIR)/$(TARGET): $(OBJECTS)
|
|
$(CXX) $(CFLAGS) -o $(BIN_DIR)/$(TARGET) $^ $(LDFLAGS)
|
|
|
|
.PHONY: all debug release valgrind clean markdown doxygenconf
|
|
|
|
debug: CFLAGS += $(GCXX_DEBUG)
|
|
debug: all
|
|
|
|
release: CFLAGS += -O2
|
|
release: all
|
|
|
|
# debug target
|
|
valgrind:
|
|
@valgrind --leak-check=full --show-leak-kinds=all --trace-children=no --track-origins=yes $(BIN_DIR)/$(TARGET) /bin/ls -la /bin
|
|
|
|
run:
|
|
$(BIN_DIR)/$(TARGET) /bin/ls -la /
|
|
|
|
clean:
|
|
@rm -f $(OBJ_DIR)/*.o
|
|
@rm -f $(BIN_DIR)/*.ex
|
|
|
|
markdown:
|
|
@pandoc --defaults=pandoc-config.yaml
|
|
|
|
doxygenconf:
|
|
@doxygen -g doxygen.conf
|
|
|
|
doc: doxygen.conf
|
|
@doxygen doxygen.conf
|
|
|
|
busybox_setup:
|
|
@tar xvf alpine-minirootfs-3.12.0-x86.tar.gz --directory=./busybox
|