Jun. 14th, 2022

eddy_em: (Default)
Переделал свой шаблон Makefile, чтобы если цель — debug, не нужно было каждый раз писать make debug: текущая цель сохраняется в файле. Чтобы сменить цель, сначала делаем make clean, затем уже make goal.
# run `make DEF=...` to add extra defines
PROGRAM := runscope
LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all
LDFLAGS += -lusefull_macros
SRCS := $(wildcard *.c)
DEFINES := $(DEF) -D_GNU_SOURCE -D_XOPEN_SOURCE=1111
OBJDIR := mk
CFLAGS += -O2 -Wall -Wextra -Wno-trampolines -std=gnu99
OBJS := $(addprefix $(OBJDIR)/, $(SRCS:%.c=%.o))
DEPS := $(OBJS:.o=.d)
TARGFILE := $(OBJDIR)/TARGET
CC = gcc
#TARGET := RELEASE

ifeq ($(shell test -e $(TARGFILE) && echo -n yes),yes)
        TARGET := $(file < $(TARGFILE))
else
        TARGET := release
endif

all: 
        @make $(TARGET)

release: $(PROGRAM)

debug: CFLAGS += -DEBUG -Werror
debug: TARGET := debug
debug: $(PROGRAM)

$(TARGFILE): $(OBJDIR)
        @echo -e "\t\tTARGET: $(TARGET)"
        @echo "$(TARGET)" > $(TARGFILE)

$(PROGRAM) : $(TARGFILE) $(OBJS)
        @echo -e "\t\tLD $(PROGRAM)"
        $(CC) $(LDFLAGS) $(OBJS) -o $(PROGRAM)

$(OBJDIR):
        @mkdir $(OBJDIR)

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif

$(OBJDIR)/%.o: %.c
        @echo -e "\t\tCC $<"
        $(CC) -MD -c $(LDFLAGS) $(CFLAGS) $(DEFINES) -o $@ $<

clean:
        @echo -e "\t\tCLEAN"
        @rm -rf $(OBJDIR) 2>/dev/null || true

xclean: clean
        @rm -f $(PROGRAM)

.PHONY: clean xclean

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 06:13 am
Powered by Dreamwidth Studios