Paul Smith schrieb am 14.01.2012 um 09:15 (-0500): > On Sat, 2012-01-14 at 13:58 +0100, Michael Ludwig wrote:
> > EmployeeTest.exe: EmployeeTest.o Employee.o > > $(LINK.cc) $^ -o $@ > > DatabaseTest.exe: DatabaseTest.o Employee.o Database.o > > $(LINK.cc) $^ -o $@ > > > > EmployeeTest and DatabaseTest are redundant here, how can you avoid > > that redundancy in specifying the rule? > > You have these choices: > > 1. Use a pattern rule > 2. Use a static pattern rule > 3. Set .SECONDEXPANSION and use $$* (requires newer versions of > make) > > You can find discussions of these in the GNU make manual. Personally > I would use a pattern rule; this is what they were designed for: > > %.exe: %.o > $(LINK.cc) $^ -o $@ > EmployeeTest.exe: Employee.o > DatabaseTest.exe: Employee.o Database.o This works perfectly, thank you! http://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html $(EXPF)%.exe: %.cpp $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ I got that line LINK.cpp from running "make -p" in a directory without a Makefile. Guess it makes sense to look at what "make -p" (without Makefile) would do. LOADLIBES and LDLIBS are empty so could be removed here. $(EXPF)EmployeeTest.exe: $(EXPF)Employee.o $(EXPF)DatabaseTest.exe: $(EXPF)Employee.o $(EXPF)Database.o The last one needs an explicit link rule because there is no homonymous source file. (I could of course rename the source file to be able to drop that rule.) $(EXPF)EmpUI.exe: $(EXPF)Employee.o $(EXPF)Database.o $(EXPF)UserInterface.o $(LINK.cpp) $^ $(LOADLIBES) $(LDLIBS) -o $@ It's nice to get a lot done without coding explicit rules, just by letting the defaults do their work and go with the flow. -- Michael Ludwig _______________________________________________ Help-make mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-make
