Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

For C++, I'm reasonably happy with CMake and the Jetbrains CLion IDE.

CMake makes it relatively painless to wrap multi-platform dependencies without having to explicitly know whether they come from a Unix package manager or from Windows DLLs.



The problem is that it does not manage and version dependencies for you. Say I start a new C++ project where I want - say - use ZeroMQ and also Folly to parse JSON. Where do I start? Should I install ZeroMQ and its headers globally? What if the version changes? Will it conflict with other system libraries? Well, better start using Docker. What if the version I need is not in the Ubuntu repositories yet? I need to add to the dockerfile instructions to download and install the dependencies... you see, things get out of hand real fast


To paraphrase JWZ...

"Some people, when confronted with a dependency problem, think 'I know, I'll use Docker.' Now they have two problems."

Unfortunately there's no single answer. Static libraries vs. dynamic? Global install or packages from a repo? Everything depends on the degree of control you have over the deployment environment.


Yeah, I know, I don't want to use docker. The problem is that C and C++ offer no real option in this camp. I'd be happy with anything that resolves and download dependencies, builds them locally (using CMake?) and adds the correct headers and library dir configurations to my project. But I could not find anything that really works


True, C/C++ have it a bit more complex. But is it really an unsolvable problem? One would think that with the level of investment in C/C++ someone would be able to create something all the hipster languages have done in the last 20 years.

I guess Gentoo's emerge would be the closest thing to a "good" C/C++ package manager we have today, which I find a bit funny :)


C++ standard committee is working on an intermediate step in the right direction: module support.


IMO, since the trend today seems to be building static binaries, I'd like to see an opinionated tool that made that use case stupid simple.


You can do this with http://Conan.io and CMake. It is quite young still, but at this point is fairly feature complete and doesn't have any breaking changes anymore.


I wish there were a simplified (as in automated) and "community-blessed" workflow at least for static binaries with source dependencies, like all the popular "modern" PLs are doing these days. I'm saying this as a newcomer (in C++ land) that finds the lack of this kind of tooling a bit intimidating.


I know what you mean. It's just really hard to bolt dependency management on C family languages, and so many ways it can exacerbate the problem by adding another layer of accidental complexity... (IMHO, CocoaPods is a good example of how a community-managed library dependency manager can end up creating a worse mess than the one it tried to solve.)

The Rust team started working on a package manager early as part of the language design, which seems like the only way to make it actually work.


Fun bit of history: it's a hard problem! Rust went through three different package managers in its history:

1. Cargo. But not the one you've heard of. A small Python script that pulled stuff off of GitHub.

2. Rustpkg. Felt like Go's tooling. https://doc.rust-lang.org/0.9/guide-rustpkg.html

3. Cargo, the one we still use today. https://mail.mozilla.org/pipermail/rust-dev/2014-March/00908... just over three years ago.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: