I'm not really sure where to post this, so hopefully this is OK.

I'm starting a project in C++. It's been a while since I've used C++, though, and I'm not really sure the best tools to use for a few things.

I would like to have an automated build process. I'd like to both be able to build the main program quite easily, as well as compile and run the tests. I'm using boost::test along with a BDD framework I found.

So what methods are there out there for automated builds? Which is the best?

I know of makefiles, obviously, and they seem most traditional. But I recall them being quite a pain to configure (with autoconf and automake and the like). That is really the only method I have ever used, though.

How would you tie testing into this? I know there are applications I've used that had a "test" target in the makefile, but I'm not really sure how that worked.

Finally, I'd like to make this as cross-platform as possible. I guess for Windows, I could include a Visual Studio solution, but I don't know how to coordinate that with the other build methods.

So I guess, if I'm developing on Windows (but with Cygwin available), what's the best way to set everything up? I wouldn't mind using Visual Studio, but don't want all of the special VC++ syntax.

On a related but somewhat off-topic note, what directory structure is recommended for large C++ projects, especially when external libraries are involved? If I'm using boost, should I include the libraries (header files and compiled libraries) that I am using?

Sorry for the conglomeration of questions, but I'm really trying to set this all up properly.

Thanks in advance for any help.