1) The structure may be the same, but if you include files in subdirectories, make sure that you use '/ and not \ . The first will work with windows.
2) I checked cmake ( http://www.cmake.org/ ) to manage the building on several platforms. This will require a lot of pain from you.
3) Use STL and Boost as much as you can. These libraries were designed with this very problem in mind. This will cover a huge part of what you may need. You have already chosen the excellent Qt library, so your GUI is not a problem either. With these three combined, you are already most there. However, you may have to do something platform independent and not covered by any of them. To do this, I suggest you write a class that provides a consistent interface for all platforms, and hide nitty-gritty with preprocessor directives in the source file. It is imperative to set a consistent interface.
4) Use SVN. I donβt know how to do this on other compilers, but in Visual Studio itβs trivial to get the latest version and paste it into some file, which is then included in your project. You can use build events for this. Sorry, I canβt elaborate on other platforms.
Also, if you need to go beyond STL, Boost, Qt, etc., remember the documentation of API calls on all platforms. I was bitten in the past by the behavior of the fseek() API call, which wrote bytes for upload to a destination in one implementation, but not in another. This could be the main cause of the headache and another reason to try and stick to the tried and tested libraries, as mentioned above.
Moo juice
source share