Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объясните пример Makefile 
:(
    Опции темы
KVA
Дата 25.5.2010, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 18.11.2009

Репутация: нет
Всего: 1



Надо собрать под Linux, QNX код на c++. Есть MinGW3.2.
Нашла в нете makefile, даже с комментариями. Только они мне не помогли. Вот он:
Код

# Префикс имени компилятора выбирается 
# исходя из настроек параметра CROSS
ifndef CROSS
CROSS = arm-elf
endif

# Для работы необходимо определить имя компилятора C, 
# ассемблер и утилиты перобразования объектных кодов
CC = $(CROSS)-gcc
AS = $(CROSS)-gcc
SIZE = $(CROSS)-size 
OBJCOPY = $(CROSS)-objcopy 
    
    #выбор набора программных возможностей, привязка аппаратуры
ifeq ($(DEVICE),BENDER)
    FEATURESET = USE_CNC
    CHIP  = AT91SAM9260
    ARCH  = ARM926
else ifeq ($(DEVICE),SH32LS2)
    CHIP = AT91SAM7S64
    ARCH  = ARM7TDMI
else
    CHIP  = AT91SAM9260
    ARCH  = ARM926
    FEATURESET = USE_CNC USE_OHCI
endif

    # выбор параметров оптимизации
ifeq ($(ARCH), ARM926)
    OPTIMIZATION += -march=armv5te
else
    OPTIMIZATION += -march=armv4t
endif
OPTIMIZATION +=-Os

# преобразование текстовых строк в набор определений
FEATURESET := $(filter-out $(FEATURE_DEL),$(FEATURESET))
FEATURESET += $(FEATURE_ADD)

FEATURESET_CFLAGS = $(patsubst %,-D%,$(FEATURESET))
$(foreach USE,$(FEATURESET),$(eval $(USE) = yes))

# Определение цели и вспомогательных папок
OUTPUT = $(DEVICE)-$(CHIP)-test

# правила включения директорий, флаги компиляции
INCLUDES = -I./ -I../ -Ihal/ -Icore/ -Iboard/$(BOARD)/
        
CFLAGS += -Wall
CFLAGS += $(OPTIMIZATION) $(INCLUDES) 
CFLAGS += -D$(CHIP) -D$(BOARD) $(FEATURESET_CFLAGS)

ASFLAGS = $(OPTIMIZATION) -D$(CHIP) -D__ASSEMBLY__ -c
LDFLAGS += -s $(OPTIMIZATION)

    # подключение файлов в проект
C_SOURCES += main.c
C_SOURCES += hal/aic.c hal/pio.c hal/pit.c hal/usart.c
C_SOURCES += core/config.c 

ifdef USE_OHCI
C_SOURCES += core/usb_ohci.c
endif

ifdef USE_CNC
C_SOURCES += cnc_machine.c
endif

# правила сборки по типам файлов
all: $(OBJ)

$(OBJ): $(ASM_SOURCES:.S=.o) $(C_SOURCES:.c=.o)
    $(CC) $(LDFLAGS) -n -o $(OUTPUT).elf $^
    $(SIZE) $(OUTPUT).elf

$(ASM_SOURCES:.S=.o): $(ASM_SOURCES)

clean:
    rm -rfv $(C_SOURCES:.c=.o) $(ASM_OBJECTS:.S=.o) $(OUTPUT).elf




Понятны только переменные CROSS, CC, AS,INCLUDES, CFLAGS, C_SOURCES.
Особенно не понятны:
#выбор набора программных возможностей, привязка аппаратуры
# выбор параметров оптимизации

Поясните мне, пожалуйста.



Это сообщение отредактировал(а) KVA - 25.5.2010, 05:04
PM MAIL   Вверх
xvr
Дата 25.5.2010, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(KVA @  25.5.2010,  05:04 Найти цитируемый пост)
Особенно не понятны:
И чего тут непонятного?

Цитата

#выбор набора программных возможностей, привязка аппаратуры
Настройка (по переменной DEVICE) на конкретный чип (AT91SAM9260/AT91SAM7S64)
Цитата

# выбор параметров оптимизации
В зависимости от архитектуры чипа (задается неявно в предыдущем пункте) выбирает подмножество системы команд (для ARM926/ARM7TDMI)

PM MAIL   Вверх
GrishinUS
Дата 31.5.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 5.9.2006
Где: Самара

Репутация: нет
Всего: нет



Код

all: $(OBJ)
$(OBJ): $(ASM_SOURCES:.S=.o) $(C_SOURCES:.c=.o)
    $(CC) $(LDFLAGS) -n -o $(OUTPUT).elf $^
    $(SIZE) $(OUTPUT).elf
$(ASM_SOURCES:.S=.o): $(ASM_SOURCES)

да, это сложный makefile если до этого не работали с ними.

Вот посмотрите
http://mrbook.org/tutorials/make/
http://linuxgazette.net/issue83/heriyanto.html
объясняется достаточно доходчиво.

Цитата

# выбор параметров оптимизации


march=armv5te

просто у компилятора есть такой ключ, см. http://linux.die.net/man/1/g++
фактически тут при выполнении условия 
Код

($(ARCH), ARM926)


к строке опций компилятора добавляется опция -march=armv5te.
Потом, когда компилятор будет вызван переменная OPTIMIZATION "раскроется" и будет вызвано что-то типа:
Код

g++ -Wall -O2 -march=armv5te


Цитата

#выбор набора программных возможностей, привязка аппаратуры


здесь тоже самое, переменные
Код

FEATURESET, CHIP, ARCH

содержат строковые значения, которые в конечном счете будут подставлены при вызове компилятора.
Например FEATURESET используется в переменной FEATURESET_CFLAGS, которая в свою очередь подставляется в CFLAGS.
Код

CFLAGS += -D$(CHIP) -D$(BOARD) $(FEATURESET_CFLAGS)
...


Если будут вопросы -- формулируйте что именно непонятно.
PM MAIL ICQ   Вверх
djamshud
Дата 31.5.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 1
Всего: 39



Если эта тема еще не забыта, то вот хороший мануал по Makefile, фактически перевод info.

http://www.opennet.ru/docs/RUS/make_compile/make.html


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
KVA
Дата 31.5.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 18.11.2009

Репутация: нет
Всего: 1



Спасибо, разбираюсь smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.