Billy ONeal
Billy ONeal

Reputation: 106530

How should I manage dependencies in C or C++ open source projects?

I've got a few open source applications. These depend on a few third party components, notably Crypto++ and Boost. There are a couple of options to take:

What should I do?

Note: I'm not working in an environment where reliance on a dependency mapper like aptitude, apt-get, or yum are acceptable.

Upvotes: 14

Views: 3866

Answers (4)

Leif Andersen
Leif Andersen

Reputation: 22332

If you have a good package manager, than I would definitely not include dependencies in your repository. If you list the dependencies, it should be pretty easy for someone compiling it to get them from the repos.

If you wanted to, you could include all of the dependencies as an additional download if you wanted to. But mixing them in with the code your working is generally not a good idea.

Upvotes: 0

Andrew White
Andrew White

Reputation: 53496

I suggest Autoconf which was designed to abstract these worries away from you.

I doubt you can be expected to maintain build scripts for all of your dependencies across all platforms. Another problem with keeping 3rd party code in your svn is that now you also need to track down their dependencies and so on.

Upvotes: 3

Xeo
Xeo

Reputation: 131789

Option 3: Don't include it in your code distribution but instead include a (link to a) download, which should match the most recent version you support.
Also, explicitly list your dependencies and the most recent versions you support.

This allows users to do however they want. Want your code with dependencies? Load both from one source. Want only part of the dependencies because you have the others? Load part of them. Want only your code? Load it seperately.

Option 4: Offer 2 versions, one including the dependencies and the other without but combined with option 3 above.

Upvotes: 7

ronag
ronag

Reputation: 51255

I think its a good idea to have dependencies in the SVN. That way developers can simply check-out and compile. Also you avoid the problem with different incompatible versions of your dependencies.

If you put the dependencies in a separate folder then developers can choose not to check-out your dependencies if they alrdy have them...

Upvotes: 1

Related Questions