Closed dzanis closed 7 years ago
Вот пример заготовки Makefile, которая весь мусор в директорию mk сбрасывает:
make DEF=...
to add extra definesPROGRAM := LDFLAGS := -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,--discard-all SRCS := $(wildcard *.c) DEFINES := $(DEF) -D_XOPEN_SOURCE=1111 OBJDIR := mk CFLAGS += -O2 -Wall -Werror -Wextra -Wno-trampolines -std=gnu99 OBJS := $(addprefix $(OBJDIR)/, $(SRCS:%.c=%.o)) DEPS := $(OBJS:.o=.d) CC = gcc
all : $(OBJDIR) $(PROGRAM)
$(PROGRAM) : $(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 -f $(OBJS) $(DEPS) @rmdir $(OBJDIR) 2>/dev/null || true
xclean: clean @rm -f $(PROGRAM)
gentags: CFLAGS="$(CFLAGS) $(DEFINES)" geany -g $(PROGRAM).c.tags *[hc] 2>/dev/null
.PHONY: gentags clean xclean
Спасибо это помогло.И вот что получилось
#Makefile for stm8 sdcc project
NAME=testproj
SDCC=sdcc
INCLUDES=-I../ -I/usr/share/sdcc/include
DEFINES=-D STM8S103
CCFLAGS= -mstm8 --out-fmt-ihx
LDFLAGS= -mstm8 --out-fmt-ihx -lstm8
FLASHFLAGS=-c stlinkv2 -p stm8s103f3
OBJDIR=build
SRC=$(wildcard *.c)
OBJS= $(addprefix $(OBJDIR)/,$(SRC:%.c=%.rel))
all: $(OBJDIR) $(NAME).ihx
$(OBJDIR):
mkdir $(OBJDIR)
clean:
rm -Rrf $(OBJDIR)
flash: $(NAME).ihx
stm8flash $(FLASHFLAGS) -w $(OBJDIR)/$(NAME).ihx
$(OBJDIR)/%.rel: %.c
$(SDCC) $(CCFLAGS) $(INCLUDES) $(DEFINES) -o $@ -c $<
$(NAME).ihx: $(OBJS)
$(SDCC) $(LDFLAGS) $(OBJS) -o $(OBJDIR)/$(NAME).ihx
.PHONY: all
Помогите,как сделать ,что-бы многофайловый проект компилировался в папку build ?Что прописать в Makefile? На примере переменной OUTPUT_DIR=build/ .