|
From: | patrik.logdahl |
Subject: | (no subject) |
Date: | Thu, 22 Feb 2007 13:35:56 +0100 |
Hi all,
I'm having a problem with automatic dependency generation from source-files that depend on auto-generated header files. Here's a (vastly) simplified example.
-- BEGIN Makefile
%.cpp %.h : %.idl
$(IDL.comp) $<
%.o : %.cpp
tools/cxx-deps $(dir $*) $(CPPFLAGS) $< > $*.d
$(COMPILE.cpp) $(OUTPUT_OPTION) $<
SRC := main.cpp A.cpp # NOTE: A.cpp is auto-generated by the IDL tool
OBJS := $(SRC:.cpp=.o)
DEPS := $(SRC:.cpp=.d)
prog : $(OBJS)
# Linker...
-include $(DEPS)
-- END Makefile
(the cxx-deps script will generate .d files in accordance to what Paul S. mentions on his website.)
Assume that main.cpp #include's A.h
Now this may or may not work.
If make tries to build A.o first, it will deduce that it must run the IDL tool first, and everything is fine (the entire source tree exists)
If make tries to build main.o first (and at the same time main.d) it will fail, because A.h does not exist yet.
Some simple workarounds are available:
* The developer can add some dependencies manually (main.cpp : A.h in this case) but that will quickly get out of hand in a large project. Also, some developer working on module FOO shouldn't need to know what parts of module BAR are auto-generated right?
* I could make some phony targets and make sure that all auto-generation steps are performed first. This doesn't help much though when the auto-generated files are in another module. I would have to litter the makefiles with "high-level" dependecies between modules. I suspect that this will quickly deteriorate to a scheme that will be equivalent to remaking all other modules prior to making the current module.
So my dilemma is this:
I need to have automatic dependency generation, but generating the dependencies is hard/impossible(?) when the dependencies themself havent been generated yet.
Any practical workarounds (that would work for a larger project as well)?
NOTE: I realize that this isn't a bug or a problem with make per se, its just a problem with how i'm trying to use it. After all, im trying to get the compiler to tell me what include files i'm depending on, even though it cannot find them.
[Prev in Thread] | Current Thread | [Next in Thread] |