I'm about to upload a project I've been working on onto Sourceforge under the GPL, and was hoping to get some advice on how to organize the code in a fashion that is easy to understand and use by any developers that might look at it, that works well with git, and the way Sourceforge presents things.
My projects is a cross-platform C++ application, and consists of the following:
- A library portion, which does the actual work
- A separate GUI portion, which uses the library portion
- Open source libraries, whose include paths are needed to compile the library
- Modified open source libraries, which have been altered, and hence are in some sense a direct part of this project as well
- Compiled output of all of the libraries
What's the best way to organize this?
While working on it myself, from the project root I have it like this:
/LibPortion
/GuiPortion
/libs/open source libraries
/libs/modified open source libraries
/libs/compiled/ to hold the compiled libraries, including when compiling for Windows some that aren't from the open source libraries, such as the Cygwin library files
Is this a sensible way to organize things? Does that match conventions and expectations?
When checking in my project, does it make sense to check in the open source libraries as well as part of the project? I figure that it makes sense to do so, because that minimizes friction with getting the project set up and running for a new dev. Certainly I should at least check in the modified open source libraries.
Also, what does it make sense to include in the repository under compiled libraries? I'm thinking it might be best to tell git to ignore that directory and leave it empty, since its contents will be different on every build target, since my project is cross-platform.
However, it also seems really nice for people who don't want to hassle with building and/or downloading all the libraries themselves to offer the libraries pre-compiled for major platforms. What's the smartest way to also share those? I'm looking at Sourceforge, and it's not readily apparent to me how I should share those if not as part of my git repository.