реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> make, выборочная компиляция
dimka76
сообщение Jan 6 2011, 06:07
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



как заставить утилиту make с помощью Makefile компилировать не все исходники, а лишь те, которые изменились после последней компиляции?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 6 2011, 06:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Проблема совершенно не понятна, ибо это ее работа по жизни. Опишите зависимости правильно. А "заставалять" скорее нужно компилировать все подряд.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jan 6 2011, 06:24
Сообщение #3


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(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



--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 7 2011, 04:03
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Возьмите примеры у Мартина Томаса там много интересного
Go to the top of the page
 
+Quote Post
Damon
сообщение Jan 8 2011, 04:26
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 12-12-05
Пользователь №: 12 125



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


Здесь ( Эффективное использование GNU Make ) описано, как добиться желаемого результата. Свой мейкфайл, с претензией на универсальность, писал именно по этому руководству.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jan 10 2011, 02:27
Сообщение #6


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Спасибо всем ответившим.
Если я правильно понял, то у меня не хватало генерации зависимостей.

Я взял makefile из примеров для scmRTOS и все заработало так как хотелось.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 07:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016