raider 0 25 апреля, 2007 Опубликовано 25 апреля, 2007 · Жалоба Здравствуйте, Уважаемые форумчане! Пробую собрать стек 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 $@ $^ Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stass 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Собственно, вот: $(OBJECTDIR)/%.o: %.c $(CC) $(CFLAGS) -c $< -o $@ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spf 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Для чего в опциях при линковке нужно указать эту самую библиотеку. Смотрю мэйкфайлы, но не могу понять, где правило, по которому производится сборка всего проекта из объектных файлов, т.е. вызов 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 стоит записать явное правило. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться