views:

245

answers:

2

In a makefile, I have the following line:

helper.cpp: dtds.h

Which ensures that helper.cpp is rebuilt whenever dtds.h is changed. However, I want ALL files in the project to be rebuilt if either of two other header files change, kind like this:

*.cpp: h1.h h2.h

Obviously that won't work, but I don't know the right way to get nmake to do what I want. Can someone help? I don't want to have to manually specify that each individual file depends on h1.h and h2.h.

Thanks. (I'm using nmake included with visual studio 2005.)

+3  A: 

Try

%.cpp : h1.h h2.h

That works in GNU make - no idea if nmake is compatible...

Edit: And btw: shouldn't that be

helper.o : dtds.h

%.o :  h1.h h2.h

After all, you don't want to remake the .cpp file (how do you make a source file?), but recompile...

Edit2: Check the NMAKE Reference. According to this, something like

.cpp.obj: h1.h h2.h

might work...

Christoph
%.o doesn't seem to work in nmake, unfortunately. And for some reason, both "helper.cpp: dtds.h" and "helper.obj: dtds.h" work fine.
Colen
+1  A: 

Thanks for your help, Christoph. I tried:

.cpp.obj: h1.h h2.h

And got the helpful error message:

makefile(58) : fatal error U1086: inference rule cannot have dependents

I ended up solving it by making a list of the files that I wanted to compile, and then adding the dependency to the whole list.

files = file1.obj file2.obj file3.obj $(files): h1.h h2.h

Colen