On Dec 2, 2013, at 10:33 PM, Jed Brown <[email protected]> wrote:
> Barry Smith <[email protected]> writes: >> tests: $(shell grep ":" makefile | grep runex | grep -v makefile | sed >> "s/://g” ) >> >> Unfortunately it is not that simple because for each runexX we need to >> compile the example and we only want to compile it once for all its >> uses and we need to rm it as soon as it is no longer needed. Perhaps >> we can list them in the correct order >> >> ex1: REQUIRE = ccx > > For normal examples, we don't need special targets because this will > work for all of them. > > ex%: ex%.o | chkopts > -${CLINKER} -o $@ $< ${PETSC_TS_LIB} In tests we use the funky .PETSc rule to compile the examples without displaying the compile/link output (on success since clutters the output enormously) but does display the output on failed compile/link. How can we get the same effect with this rule? I can’t live with that output. Barry > > With pattern rules like this, the intermediate files ex*.o are > automatically deleted after compilation, so we would not need the hack > of deleting it explicitly (which has the undesirable side-effect of > returning success even when linking fails). When switching PETSC_ARCH, > users can add -B to ensure recompilation. > > Note that it is natural to state the dependency > > runex123 : ex123 > > so that the examples are automatically built. If we also use > > .INTERMEDIATE: ex123 > > then "make runex123 runex123_2" would build ex123 (once), run the two > examples (in parallel if you used -j), and delete the executable ex123. > > > But for testing, I would much prefer to compile one executable per > package. I have code for this, and it builds all the examples in PETSc > in 30 seconds, but I stalled on the test harness. I can push the proof > of concept in a branch. Simply compiling all the examples fast in a > single target would be useful to root out issues with API changes.
