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

 
 
> makefile в uip 1.0, как производится линковка?
raider
сообщение Apr 25 2007, 13:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 11-05-05
Из: г. Москва
Пользователь №: 4 916



Здравствуйте, Уважаемые форумчане!
Пробую собрать стек uip 1.0 с помощью gcc под win32 c использованим библиотеки winpcap. Для чего в опциях при линковке нужно указать эту самую библиотеку. Смотрю мэйкфайлы, но не могу понять, где правило, по которому производится сборка всего проекта из объектных файлов, т.е. вызов gcc с соответствующими ключами. Подскажите, плз.
PS: Ниже оригинальные мэйкфайлы из uip 1.0. Немного их поправив, я скомпилировал объектые файлы. Затем, вручную слинковав объектые файлы, я получил рабочий uip.exe

Основной makefile:
Код
all: uip

CC     = gcc
AR     = ar
APPS   = webserver
CFLAGS = -Wall -g -I../uip -I. -fpack-struct -Os
-include ../uip/Makefile.include

uip: $(addprefix $(OBJECTDIR)/, main.o tapdev.o clock-arch.o) apps.a uip.a

clean:
    rm -fr *.o *~ *core uip $(OBJECTDIR) *.a


Makefile.include:
Код
ifdef APPS
  APPDIRS = $(foreach APP, $(APPS), ../apps/$(APP))
  -include $(foreach APP, $(APPS), ../apps/$(APP)/Makefile.$(APP))
  CFLAGS += $(addprefix -I../apps/,$(APPS))
endif

ifndef CCDEP
  CCDEP = $(CC)
endif
ifndef CCDEPCFLAGS
  CCDEPCFLAGS = $(CFLAGS)
endif
ifndef OBJECTDIR
  OBJECTDIR = obj
endif

ifeq (${wildcard $(OBJECTDIR)},)
  DUMMY := ${shell mkdir $(OBJECTDIR)}
endif


vpath %.c . ../uip ../lib $(APPDIRS)

$(OBJECTDIR)/%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

$(OBJECTDIR)/%.d: %.c
    @set -e; rm -f $@; \
    $(CCDEP) -MM $(CCDEPCFLAGS) $< > $@.$$$$; \
    sed 's,\($*\)\.o[ :]*,$(OBJECTDIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \
    rm -f $@.$$$$

UIP_SOURCES=uip.c uip_arp.c uiplib.c psock.c timer.c uip-neighbor.c


ifneq ($(MAKECMDGOALS),clean)
-include $(addprefix $(OBJECTDIR)/,$(UIP_SOURCES:.c=.d) \
                                   $(APP_SOURCES:.c=.d))
endif

uip.a: ${addprefix $(OBJECTDIR)/, $(UIP_SOURCES:.c=.o)}
    $(AR) rcf $@ $^

apps.a: ${addprefix $(OBJECTDIR)/, $(APP_SOURCES:.c=.o)}
    $(AR) rcf $@ $^

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
Stanislav Sedov
сообщение Apr 28 2007, 01:00
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 24
Регистрация: 3-05-06
Из: г. Москва
Пользователь №: 16 729



Собственно, вот:

$(OBJECTDIR)/%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@


--------------------
ST4096-RIPE
Go to the top of the page
 
+Quote Post
spf
сообщение Apr 28 2007, 08:00
Сообщение #3


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(raider @ Apr 25 2007, 16:06) *
Для чего в опциях при линковке нужно указать эту самую библиотеку. Смотрю мэйкфайлы, но не могу понять, где правило, по которому производится сборка всего проекта из объектных файлов, т.е. вызов gcc с соответствующими ключами. Подскажите, плз.

на makefile uip не смотрел, но GNU make имеет ряд неявных правил.
Одно из них можно записать как
Код
uip: %.o
    $(CC) $(LDFLAGS) uip.o $(LOADLIBES) $(LDLIBS)


С учетом явной зависимости
uip: $(addprefix $(OBJECTDIR)/, main.o tapdev.o clock-arch.o) apps.a uip.a
при линковке к uip.o будет добавлен весь список объектников из этой зависимости.

Для получения uip.exe стоит записать явное правило.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post

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

 


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


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