Можно раскидать всё по каталогам и не боятся что какой-либо файл в SRC списке с ошибкой в имени!
Также в исходниках программы можно подключать любые заголовочные файлы из SOURCE_DIRS
не указывая полного или относительного пути, они все будут найдены автоматически!
Ещё одно достоинство - в директориях SOURCE_DIRS никогда не будет появляться мусор.
Вот как выглядит основной результат:
Код
# List source directories here:
SOURCE_DIRS = .
SOURCE_DIRS += ../../arclib/avr
SOURCE_DIRS += ../../arclib/ic_drivers
SOURCE_DIRS += ../../arclib/common
SOURCE_DIRS += ../../arclib/common/modbus
VPATH := $(SOURCE_DIRS)
CFLAGS += -Wa,-adhlns=$(addprefix $(OBJDIR)/, $(notdir $(<:%.c=%.lst)))
CFLAGS += $(addprefix -I, $(SOURCE_DIRS))
CPPFLAGS += -Wa,-adhlns=$(addprefix $(OBJDIR)/, $(notdir $(<:%.cpp=%.lst)))
CPPFLAGS += $(addprefix -I, $(SOURCE_DIRS))
CPPFLAGS += -Wa,-adhlns=$(addprefix $(OBJDIR)/, $(notdir $(<:%.cpp=%.lst)))
CPPFLAGS += $(addprefix -I, $(SOURCE_DIRS))
ASFLAGS = -Wa,-adhlns=$(addprefix $(OBJDIR)/, $(notdir $(<:%.S=%.lst))),-gstabs,--listing-cont-lines=100
# Define all object files.
OBJ := $(SRC:%.c=%.o) $(CPPSRC:%.cpp=%.o) $(ASRC:%.S=%.o)
OBJ := $(notdir $(OBJ))
OBJ := $(addprefix $(OBJDIR)/,$(OBJ))
# Define all listing files.
LST := $(SRC:%.c=%.lst) $(CPPSRC:%.cpp=%.lst) $(ASRC:%.S=%.lst)
LST := $(notdir $(LST))
LST := $(addprefix $(OBJDIR)/,$(LST))
# Define Messages
# English
MSG_COMPILING = Compiling C:
#.....
MSG_FILE_NOT_FOUND = File not found:
# Default target.
all: begin testsrc gccversion sizebefore build sizeafter end
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
testsrc:
@let errorstop=0; \
for srcfile in $(SRC); do \
let filesfound=0; \
for srcpath in $(VPATH); do \
if test -e "$$srcpath/$$srcfile"; then let filesfound++; fi; \
done; \
if test $$filesfound == 0; then echo $(MSG_FILE_NOT_FOUND) $$srcfile; let errorstop++; fi; \
done;\
if test $$errorstop != 0; then echo; exit 1; fi
begin:
@echo
@echo $(MSG_BEGIN)
end:
@echo $(MSG_END)
@echo
# Listing of phony targets.
.PHONY : all testsrc begin finish end sizebefore sizeafter gccversion \
build elf hex eep lss sym coff extcoff \
clean clean_list program debug gdb-config
Остался последний вопрос:
exit 1 - это стандартно? Будет ли работать не под win?