MHR wrote:
Where I work, we have an application that has been merrily running away (and being built) on FC1 (yes, you read that right).
One of my assignments is to bring this up to CentOS, but on my first effort, I ran into this interesting "feature." The original build process (FC1) uses mkdep to generate the dependency files that are subsequently used by the makes to build the app. mkdep does not exist in CentOS 5.2. There is a makedepend command that operates slightly differently.
Can someone enlighten me on this, particularly w.r.t. 1) how do I use makedepend to generate the same files mkdep did and is this a good idea (my impression is that it's not really that hard but also not necessarily a good idea or 2) convert all the makefiles to be makedepend friendly (seems relatively easy, though fairly extensive, but probably a better idea and also harmless should I wish/need to continue to build on the FC1 system?
At some point a long time ago I was using makedep/makedepend, but I replaced that with gcc -MM to generate the Makefile dependancies automatically.
man gcc, search for -MM will tell you more.
Here's an excerpt from one of my project's Makefile, in case it helps.
################################################################# # making the dependancy files ################################################################# # each .c file has a corresponding .d file in the deps/ subdir. # This .d file holds the dependancies for the .o. # The .d is rebuilt automatically whenever the deps may have changed.
# the dependency files # following only seems to work with gnu make, patsubst should be more standard #DEPS := $(SRCS:%.c=deps/%.d) DEPS := $(patsubst %.c,deps/%.d,$(SRCS))
# rule to build the .d files # the output of gcc -MM is something like: # $ gcc -MM pools.c # pools.o: pools.c config.h types.h pools.h fonc.h # the perl line then changes this into: # pools.o deps/pools.d: pools.c config.h types.h pools.h fonc.h # Therefore each .d depends on all the files that the corresponding # .o depends on, and will be rebuilt when necessary. # I think this can be useful for conditional includes, for example # if pools.c has a block: # #ifdef GMP # #include "gmp.h" # #endif # and GMP is defined in config.h...
deps/%.d: %.c @echo rebuilding dependancy file $@ @$(SHELL) -ec '$(CC) -MM $(CFLAGS) $< | $(PERL) -e '''while(<>){s/^(.*).o:/$$1.o deps/$$1.d:/g;print;}'''> $@'
# include all dep files include $(DEPS)