# # Makefile # # Copyright 2026 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301, USA. # # # ---------------- User config ---------------- # Name of project PROJECT_NAME=projmr # Compiler CC=gcc # Compiler flags CFLAGS= -Wall -Wextra # Options OPTIONS= -O2 $(CFLAGS) -ansi # Binary file link name OUTPUT_LINK=$(PROJECT_NAME) # Project main name INPUT_NAME=$(PROJECT_NAME).c # Install path INSTALL_PATH=/usr/local/bin # Binary name INSTALL_BIN=$(PROJECT_NAME) # ---------------- System config ---------------- # Install full-path INSTALL_NAME=$(INSTALL_PATH)/$(INSTALL_BIN) # Command for copy files COPY=cp # Copy argument for ignore links paths IGNORED_PATH_ARG= -P # Command for create link LINK_CREATE=ln # Parametr for create softlink LINK_SOFT= -s # Create soft link CREATE_SOFT_LINK=$(LINK_CREATE) $(LINK_SOFT) # Command for remove files REMOVE_CMD=rm # Rms flags FOR_REMOVE_DIR= -rf FOR_REMOVE_FILE= -f # Library directory LIBRARY=Library # Recursive copy RECURSIVE= -r # Application directory APPLICATION=Application # Templates directory TEMPLATES=Templates # Temporary directory TEMPORARY=Temporary # Output binary name OUTPUT_NAME=$(TEMPORARY)/$(PROJECT_NAME) # Sources files SOURCES=$(wildcard $(APPLICATION)/*.c) # Objects files OBJECTS=$(patsubst $(APPLICATION)/%.c, $(TEMPORARY)/%.o, $(SOURCES)) # Make token TOKEN=install_pkg # Templater TEMPLATER=projmr # Path to install PROJMR_SPECIFID_INSTALL_PATH=/etc/$(TEMPLATER)_$(TOKEN)/$(PROJECT_NAME) .PHONY: clean install uninstall $(OUTPUT_LINK): $(OBJECTS) @mkdir -p $(TEMPORARY) touch .gitignore grep $(TEMPORARY)/ .gitignore || echo $(TEMPORARY)/ > .gitignore $(CC) $(OBJECTS) -o $(OUTPUT_NAME) $(REMOVE_CMD) $(FOR_REMOVE_FILE) $(OUTPUT_LINK) $(CREATE_SOFT_LINK) $(OUTPUT_NAME) $(OUTPUT_LINK) $(TEMPORARY)/%.o: $(APPLICATION)/%.c @mkdir -p $(dir $@) $(CC) $(OPTIONS) -c $< -o $@ all: $(OUTPUT_LINK) clean: $(REMOVE_CMD) $(FOR_REMOVE_DIR) $(TEMPORARY)/* $(REMOVE_CMD) $(FOR_REMOVE_FILE) $(OUTPUT_LINK) install: all if test -d $(PROJMR_SPECIFID_INSTALL_PATH); then \ echo "[ INSTALL ERROR ] The program is already installed!"; \ exit 1; \ fi @mkdir -p $(PROJMR_SPECIFID_INSTALL_PATH) $(COPY) $(RECURSIVE) ./* $(PROJMR_SPECIFID_INSTALL_PATH)/ $(REMOVE_CMD) $(FOR_REMOVE_FILE) $(INSTALL_NAME) $(REMOVE_CMD) $(FOR_REMOVE_DIR) $(PROJMR_SPECIFID_INSTALL_PATH)/$(APPLICATION) $(REMOVE_CMD) $(FOR_REMOVE_DIR) $(PROJMR_SPECIFID_INSTALL_PATH)/$(LIBRARY) $(CREATE_SOFT_LINK) $(PROJMR_SPECIFID_INSTALL_PATH)/$(OUTPUT_NAME) $(INSTALL_NAME) uninstall: $(REMOVE_CMD) $(FOR_REMOVE_FILE) $(INSTALL_NAME) $(REMOVE_CMD) $(FOR_REMOVE_DIR) $(PROJMR_SPECIFID_INSTALL_PATH)