|
From: | Srivathsan S |
Subject: | autodependency generation - inifinite loop problem |
Date: | Fri, 18 Feb 2005 20:04:11 +0530 |
Hi, I need some help in figuring out why my
Makefile goes into an infinite loop while generating dependencies. I am using
SCO-unix and I have run my Makefile on 3 different SCO machines. It runs fine
on 2 of them (i.e., the .d files are generated, they are properly included,
object files are created and executable is generated. Also, when a .h file is changed, it finds
out the proper dependencies and rebuilds only them), but, on the 3rd SCO machine, generating prerequisites goes
into an infinite loop. I am unable to pin-point the issue. But, I know that the
sed command pattern (to generate .d files) may be an issue (if I comment that
line, it does not go into infinite loop). I am not sure if it is a SCO
installation (on that machine) issue or my Makefile issue. I do not know where
to begin looking. Can anyone help me out? Below is the Makefile I have written: SHELL
= /bin/sh BIN
= /usr/gnu/bin RM
= /bin/rm -f MYSQLBIN =
/usr/local/mysql/bin MYSQLLIB =
/usr/local/mysql/lib LXmX11PATH = /usr/X11R6.1/lib LXtPATH =
/usr/lib MYSQLINC =
/usr/local/mysql/include OBJDIR
= obj EXECNAME = seiko MINIMAKEDIR = mini_makes # compiler CC
= $(BIN)/gcc # prefix -l for library name and -L for library path. LDFLAGS =
-lmysqlclient -lXm -lXt -lX11 -lsocket -lc -lm -ldmalloc LOADLIBS =
-L$(MYSQLLIB) # Compiler flags. All warnings disabled (-Wall). CFLAGS
= -g COMPILE =
$(CC) $(CFLAGS) INCLUDES =
-I/usr/local/include SOURCE
= l_main.c seikocfg.c lgraphics.c lgcomm_func.c lgcolor_func.c lcreat_config.c
\
lgcomm_menu.c lgconn_diag.c lgtask_bar.c lgdsw.c
lgdsw_config.c lgdsw_conn.c \
lgdswdir.c lgvsw.c lgvsw_config.c lgvsw_conn.c lgvswdir.c lghkdhk.c
lghkdhk_stat.c \
lsdh_comm.c leucomm_proc.c laux_comm.c lbeu_comm.c lpr_process.c lgsatrft.c
seiko_gist.c \
seiko_debug.c lguseradmin_main.c # This will replace every occurance of .c file to .o file # equivalent to OBJS = abc.o def.o OBJS
= $(SOURCE:.c=.o) # This will replace every occurance of .c file to .d file DEPS
= $(SOURCE:.c=.d) .SUFFIXES: # clear all existing
suffixes .SUFFIXES: .o .c .c.o: $(COMPILE) -c
$< -o $@ # Pattern rule to generate a file of pre-requisites (i.e., a
mini-makefile) # called <source-file.d> from a C source-file call
source-file.c # I got the below pattern-rule from the GNU Make
online manual. # http://www.gnu.org/software/make/manual/html_mono/make.html#SEC51 %.d: %.c @echo
"Generating prerequisites for $< . Please wait." @set -e; rm -f
$@; \ $(CC) -MM
$(CFLAGS) $< > address@hidden; \ sed 's,\($*\)\.o[
:]*,\1.o $@ : ,g' < address@hidden > $@; \ rm -f address@hidden # target: source-file(s) # command(must be
preceded by a tab) $(EXECNAME): $(OBJS) @echo
"\nMaking the executable $(EXECNAME)\n" $(COMPILE) $^
$(INCLUDES) $(LOADLIBS) $(LDFLAGS) -o $@ @echo
"\n" @date @echo
"\n" # I don't want Make to get confused if a file named
"all" # should happen to exist. So, I make "all" a phony
target, # i.e., a target that Make should always try to update. I do # that making "all" the dependency for the phony
target. .PHONY : all all: $(EXECNAME) # To avoid Make creating .d files and deleting all of them # when 'make clean' is called. # I am now including all the mini-makefiles I had generated # before and integrating into the master Makefile. ifneq ($(MAKECMDGOALS), clean) -include $(DEPS) endif # This is to make sure that 'clean' is a phony target and
will run # the commands irrespective of whether there is a file named
'clean'. .PHONY: clean clean: @$(RM) *.o @$(RM) *.d @$(RM)
$(EXECNAME) @$(RM) core @$(RM) *~ @echo
"\n\tYour Seiko is
nice and clean now!\n" ============================================================================== Thanks much, Sri 26587072 x340 Deccanet Designs - A Flextronics Company |
[Prev in Thread] | Current Thread | [Next in Thread] |