Перейти к содержанию
    

makefile в uip 1.0

Здравствуйте, Уважаемые форумчане!

Пробую собрать стек 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 $@ $^

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для чего в опциях при линковке нужно указать эту самую библиотеку. Смотрю мэйкфайлы, но не могу понять, где правило, по которому производится сборка всего проекта из объектных файлов, т.е. вызов 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 стоит записать явное правило.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...