eddyem / STM8_samples

copy of the same project from sourceforge
75 stars 28 forks source link

Папка build #1

Closed dzanis closed 7 years ago

dzanis commented 7 years ago

Помогите,как сделать ,что-бы многофайловый проект компилировался в папку build ?Что прописать в Makefile? На примере переменной OUTPUT_DIR=build/ .

eddyem commented 7 years ago

Вот пример заготовки Makefile, которая весь мусор в директорию mk сбрасывает:

run make DEF=... to add extra defines

PROGRAM := 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

CXX = g++

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

dzanis commented 7 years ago

Спасибо это помогло.И вот что получилось

#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