We have an autotools project that has a mixture of unit and integration tests, all of which run via 'make check'. This isn't ideal, as some of the integration tests take a while, and have all sorts of dependencies (database, etc.)

I'd like to separate the integration tests and assign them their own make target. That way, unit tests can still be run often (via make check), and the integration tests can be run as needed in a similar fashion.

Is there a straightforward (or otherwise) way to add an additional make target?

NOTE: I should probably also add that this is a large project, so editing/maintaining every makefile by hand is not desirable. I'd like to do it the 'autotools way' if possible.

-- UPDATE 1 --

I've attempted Jon's solution, and it's a step closer, but not quite there. I still have a couple of issues:

1) Recursion - I'm OK with modifying the in the root of the build tree, as well as any directory that contains the tests, but it seems like there should be a way to do this where I don't have to change every in the hierarchy. (the check target works this way, after all)

2) .PHONY - I keep getting messages about .PHONY being redefined. Which is understandable, because it's being set by another package (specifically, doxygen). How do I make the two play nice together?


In your am files, all make syntax is passed into the generated Makefile. So if you want a new target just create it like you would in a Makefile and it will appear in the auto generated Makefile. Put the following at the bottom of your am files.

integration-tests: prerequisites....
        commands to run test

.PHONY: integration-tests

Since there haven't been any more responses, I'm going to answer with my solution.

I solved the recursion issue by eliminating the recursion altogether. Using this page as a guide, I switched the entire project from recursive make to non-recursive make. I then cloned the non-recursive check-related targets (check, check-am, check-TESTS, etc.) into a new set of targets for the integration tests. So far, this works extremely well.

Note: you may be wondering why I didn't just clone the recursive targets instead. Quite frankly, I couldn't find them. Either I didn't know where to look (the rules weren't in the generated Makefile) or something is happening implicitly, and I don't understand autotools well enough to follow it.

As for the issue with .PHONY being redefined, I still haven't found a solution, other than to conditionally exclude the other definition when I'm doing the integration tests.

Bill B