[vikky@server new]$ cat Makefile CC=gcc SRCDIR=./src OBJDIR=./obj LFLAGS=`xml2-config --libs` AR=ar -r LIBNAME=libcobex.a PROGNAME=Cobex CFLAGS=`xml2-config --cflags` -I./include SRC= functions.c \ hash.c \ prompt.c \ system.c OBJ= $(patsubst %.c,$(OBJDIR)/%.o,$(notdir $(SRC))) SRC:=$(patsubst %.c,$(SRCDIR)/%.c,${SRC}) All: ${OBJ} ${LIBNAME} ${PROGNAME} ${LIBNAME}: ${OBJ} $(AR) ${OBJDIR}/${LIBNAME} $(OBJ) ${PROGNAME}:${LIBNAME} gcc -g -o Cobex ${SRCDIR}/cobex.c ${OBJDIR}/${LIBNAME} ${CFLAGS} ${LFLAGS} clean: rm -f ${OBJDIR}/* ${OBJ}:$(SRC) @echo ${SRC} @echo ${OBJ} $(CC) $(CFLAGS) -c -o $@ $< [vikky@server new]$ [vikky@server new]$ make ./src/functions.c ./src/hash.c ./src/prompt.c ./src/system.c ./obj/functions.o ./obj/hash.o ./obj/prompt.o ./obj/system.o gcc `xml2-config --cflags` -I./include -c -o obj/functions.o src/functions.c ./src/functions.c ./src/hash.c ./src/prompt.c ./src/system.c ./obj/functions.o ./obj/hash.o ./obj/prompt.o ./obj/system.o gcc `xml2-config --cflags` -I./include -c -o obj/hash.o src/functions.c ./src/functions.c ./src/hash.c ./src/prompt.c ./src/system.c ./obj/functions.o ./obj/hash.o ./obj/prompt.o ./obj/system.o gcc `xml2-config --cflags` -I./include -c -o obj/prompt.o src/functions.c ./src/functions.c ./src/hash.c ./src/prompt.c ./src/system.c ./obj/functions.o ./obj/hash.o ./obj/prompt.o ./obj/system.o gcc `xml2-config --cflags` -I./include -c -o obj/system.o src/functions.c ar -r ./obj/libcobex.a ./obj/functions.o ./obj/hash.o ./obj/prompt.o ./obj/system.o ar: creating ./obj/libcobex.a gcc -g -o Cobex ./src/cobex.c ./obj/libcobex.a `xml2-config --cflags` -I./include `xml2-config --libs` /tmp/ccYs4ADp.o: In function `build_element_names': /home/vikky/Projects/C/cobex/new/./src/cobex.c:82: undefined reference to `hash' /home/vikky/Projects/C/cobex/new/./src/cobex.c:96: undefined reference to `hash' /tmp/ccYs4ADp.o: In function `statPhone': /home/vikky/Projects/C/cobex/new/./src/cobex.c:113: undefined reference to `cmdExec' /tmp/ccYs4ADp.o: In function `main': /home/vikky/Projects/C/cobex/new/./src/cobex.c:174: undefined reference to `readPrompt' collect2: ld returned 1 exit status make: *** [Cobex] Error 1 [vikky@server new]$ Notice the object creation is creating different objects with the SAME source file