Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: make
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
dimka76
как заставить утилиту make с помощью Makefile компилировать не все исходники, а лишь те, которые изменились после последней компиляции?
zltigo
QUOTE (dimka76 @ Jan 6 2011, 12:07) *
как заставить утилиту make с помощью Makefile компилировать не все исходники, а лишь те, которые изменились после последней компиляции?

Проблема совершенно не понятна, ибо это ее работа по жизни. Опишите зависимости правильно. А "заставалять" скорее нужно компилировать все подряд.
dimka76
Цитата(zltigo @ Jan 6 2011, 12:17) *
Проблема совершенно не понятна, ибо это ее работа по жизни. Опишите зависимости правильно. А "заставалять" скорее нужно компилировать все подряд.


А не подскажите как правильно.
Я не большой специалист в написании Makefile.
С моим Makefile (я его взял из какого-то атмеловского пример) при вызове cs-make компилится все подряд всегда.
cs-make это утилита из пакета Sourcery G++ Lite.

Вот текст моего makefile
Код
# Optimization level, put in comment for debugging
OPTIMIZATION = -Os

# AT91 library directory
#AT91LIB = ../at91lib

# Output file basename
OUTPUT = SAM7X_COLOR_LCD_NOKIA

# Compile for all memories available on the board (this sets $(MEMORIES))
#include $(AT91LIB)/boards/$(BOARD)/board.mak

# Output directories
BIN = bin
OBJ = obj

#-------------------------------------------------------------------------------
#        Tools
#-------------------------------------------------------------------------------

# Tool suffix when cross-compiling
CROSS_COMPILE = arm-none-eabi-
#CROSS_COMPILE = arm-kgp-eabi-

#CROSS_COMPILE = c:\nxp\lpcxpresso_3.5\Tools\bin\arm-none-eabi-

# Compilation tools
CC = $(CROSS_COMPILE)gcc
AS = $(CROSS_COMPILE)as
SIZE = $(CROSS_COMPILE)size
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump

# Flags
INCLUDES = -I./ -Iboards -IDrivers/LCD -Iperipherals
INCLUDES += -IDrivers/RTC -IDrivers/BUTTON -Imenu

CFLAGS = -c -mcpu=arm7tdmi -Wall -gdwarf-2 $(OPTIMIZATION) -mapcs-frame
CFLAGS += $(INCLUDES) -fms-extensions
CFLAGS += -Wall

ASFLAGS = -gdwarf-2  $(OPTIMIZATION) $(INCLUDES) -D__ASSEMBLY__

LDFLAGS = -T flash.ld -mcpu=arm7tdmi -nostartfiles -Wl,-Map=$(OUTPUT).map -lm

VPATH += boards
VPATH += menu
VPATH += Drivers/LCD
VPATH += Drivers/RTC
VPATH += Drivers/BUTTON
VPATH += peripherals/twi
VPATH += peripherals/spi
VPATH += peripherals/usart

#-------------------------------------------------------------------------------
#        Files
#-------------------------------------------------------------------------------

# Objects built from C source files
C_OBJECTS = board_lowlevel.o
C_OBJECTS += main.o
C_OBJECTS += spi.o
C_OBJECTS += lcd.o
C_OBJECTS += lib_twi.o usart.o
C_OBJECTS += ISL1208.o
C_OBJECTS += push_button.o
C_OBJECTS += menu.o

# Objects built from Assembly source files
ASM_OBJECTS = board_cstartup.o

# Append OBJ and BIN directories to output filename
OUTPUT := $(BIN)/$(OUTPUT)

#-------------------------------------------------------------------------------
#        Rules
#-------------------------------------------------------------------------------

all: gccversion $(BIN) $(OBJ) flash

$(BIN) $(OBJ):
    mkdir $@

define RULES
C_OBJECTS_$(1) = $(addprefix $(OBJ)/, $(C_OBJECTS))
ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/, $(ASM_OBJECTS))

$(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1))
    $(CC) $(LDFLAGS) -o $(OUTPUT).elf $$^
    $(OBJCOPY) -O ihex $(OUTPUT).elf $(OUTPUT).hex
    $(OBJDUMP) -h -z -S $(OUTPUT).elf > $(OUTPUT).lss
    $(SIZE) $$^ $(OUTPUT).elf

$$(C_OBJECTS_$(1)): $(OBJ)/%.o: %.c Makefile $(OBJ) $(BIN)
    $(CC) $(CFLAGS) -D$(1) -o $$@ $$<

$$(ASM_OBJECTS_$(1)): $(OBJ)/%.o: %.S Makefile $(OBJ) $(BIN)
    $(CC) $(ASFLAGS) -D$(1) -c -o $$@ $$<

debug_$(1): $(1)
    perl ../resources/gdb/debug.pl $(OUTPUT)-$(1).elf

endef

$(foreach MEMORY, flash, $(eval $(call RULES,flash)))

# Display compiler version information.
gccversion :
    @$(CC) --version

clean:
    -cs-rm -f $(OBJ)/*.o $(BIN)/*.hex $(BIN)/*.elf $(BIN)/*.map $(BIN)/*.lss

_Pasha
Возьмите примеры у Мартина Томаса там много интересного
Damon
Цитата(dimka76 @ Jan 6 2011, 12:07) *
как заставить утилиту make с помощью Makefile компилировать не все исходники, а лишь те, которые изменились после последней компиляции?


Здесь ( Эффективное использование GNU Make ) описано, как добиться желаемого результата. Свой мейкфайл, с претензией на универсальность, писал именно по этому руководству.
dimka76
Спасибо всем ответившим.
Если я правильно понял, то у меня не хватало генерации зависимостей.

Я взял makefile из примеров для scmRTOS и все заработало так как хотелось.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.