#makefile #make #build-utils

app make-makefile

The simple Makefile generator

1 unstable release

0.1.2 Feb 21, 2023
0.1.1 Feb 21, 2023
0.1.0 Feb 21, 2023

#1034 in Development tools

MIT license

6KB

make-makefile

The simple Makefile generator

Usage: mm [OPTIONS]

Options:
  -n, --name <NAME>  Name of the project
  -k, --kind <KIND>  Binary or library [default: bin] [possible values: bin, lib]
  -h, --help         Print help
  -V, --version      Print version

Install

If you've got the cargo package manager of Rust then you can run the command.

cargo install make-makefile

Or you can download it on the release page.


Generate a template

The mm generates Makefile template in your project directory.

You can change {PROGRAM} to your project name.

mm 
#The Target
#For Binary: <name>, For Library: lib<name>.a
NAME		:=	{PROGRAM}

#Source Files
SOURCES		:=	main.c \

#The Directories, Source, Includes, Dependencies
TESTDIR		:=	test
BONUSDIR	:=	bonus
SRCDIR		:=	src
INCDIR		:=	inc
DEPDIR		:=	dep
BLDDIR		:=	obj

#Dependencies
DEPLIBS		:=	
DEPDIRS		:=	

#Compiler, Linker, Flags
CC			:=	cc
# DEBUG		:=	-g
# SANITIZE	:=	-fsanitize=address
CFLAGS		:=	-Wall -Wextra -Werror

#-------------------------------------------------------------------------------
#DO NOT EDIT BELOW THIS LINE
#-------------------------------------------------------------------------------
TARGET		:=	$(suffix $(NAME))
CEXT		:=	c
OEXT		:=	o
INC			:=	-I$(INCDIR) $(addprefix -I$(DEPDIR)/, $(DEPDIRS))
LIB			:=	$(addprefix -l, $(DEPLIBS))
LID			:=	$(addprefix -L$(DEPDIR)/, $(DEPDIRS))
SRCS		:=	$(addprefix $(SRCDIR)/,$(SOURCES))
OBJS		:=	$(patsubst $(SRCDIR)/%,$(BLDDIR)/%,$(SRCS:.$(CEXT)=.$(OEXT)))

#Defauilt Make
all: $(NAME)

bonus: 
	@make -C $(BONUSDIR)
	@cp $(BONUSDIR)/$(NAME) ./

#Remake
re: fclean all

#Make the Directories
directories:
	@mkdir -p $(BLDDIR)

#Dependencies
depend:
	@for ddir in $(addprefix $(DEPDIR)/, $(DEPDIRS)); do \
		make -s -C $$ddir; \
	done

#Clean only Objects
clean:
	@for ddir in $(addprefix $(DEPDIR)/, $(DEPDIRS)); do \
		make -s -C $$ddir clean; \
	done
	@$(RM) -rf $(BLDDIR)

#Full Clean, Objects and Binaries
fclean: clean
	@for ddir in $(addprefix $(DEPDIR)/, $(DEPDIRS)); do \
		make -s -C $$ddir fclean; \
	done
	@$(RM) -rf $(NAME)

#Link
$(NAME): $(OBJS)
	@for ddir in $(addprefix $(DEPDIR)/, $(DEPDIRS)); do \
		make -s -C $$ddir; \
	done
ifeq ($(TARGET), .a)
	$(AR) -rc $@ $^
else
	$(CC) $(SANITIZE) $(DEBUG) $(INC) -o $(NAME) $^ $(LID) $(LIB)
endif

#Compile
$(BLDDIR)/%.$(OEXT): $(SRCDIR)/%.$(CEXT) 
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) $(SANITIZE) $(DEBUG) $(INC) -c -o $@ $<

#Non-File Targets
.PHONY: all re clean fclean bonus directories depend

Name specifier

mm --name hello
#The Target
#For Binary: <name>, For Library: lib<name>.a
NAME		:=	hello

Kind option

Binary template
mm --name hello --kind=bin
#The Target
#For Binary: <name>, For Library: lib<name>.a
NAME		:=	hello
Library template
mm --name hello --kind=lib
#The Target
#For Binary: <name>, For Library: lib<name>.a
NAME		:=	libhello.a

Dependencies

~1.2–1.7MB
~33K SLoC