
Announcing a single C++ library manager for Linux, macOS and Windows: Vcpkg - ingve
https://blogs.msdn.microsoft.com/vcblog/2018/04/24/announcing-a-single-c-library-manager-for-linux-macos-and-windows-vcpkg/
======
hoistbypetard
Digging around the announcement a bit, I'm having a hard time seeing why I
might prefer this over Conan[1], and I'm not seeing anything about how I can
stand up my own private repository for vcpkg, which is what I am about to do
with Conan. Can anyone sound off (or link a page where someone has done so) on
what might tip someone toward this over Conan or vice versa?

[1]([https://www.conan.io/](https://www.conan.io/))

~~~
ihattendorf
vcpkg has an FAQ[1] regarding this, if someone could find one from the other
perspective I think that would be helpful.

Personally, I prefer their integration with CMake, letting me
`find_package(spdlog 0.16 REQUIRED)` allowing others to point to their own
version with `-Dspdlog_DIR=...`.

[1]
[https://github.com/Microsoft/vcpkg/blob/master/docs/about/fa...](https://github.com/Microsoft/vcpkg/blob/master/docs/about/faq.md#why-
not-conan)

~~~
hoistbypetard
Thanks. It looks like at least the third bullet has been reconsidered, based
on this announcement.

But I think the front matter on that section gives (at least for what I'm
after) a pretty good start on an answer to my question. They aim to version
all libraries together as a platform (like, say, homebrew or yum+rpm). Where
Conan aims to behave a little more like what I'd term "pypi for C++". That is,
if I'm reading this correctly, and I'm not yet certain that I am.

One thing that I want to do, and it's clear to me how I'd do it with conan (or
pip) but not yet clear to me how I'd do it with vcpkg, is have a version of a
package that's available in a public repository also be available in my
internal repository with some added private patches, and have my version "win"
for my projects.

Our recurring need for this is when we're building out patches that we want to
have incorporated upstream but aren't ready to do that yet for one of many
reasons.

------
jclay
We've been using vcpkg on Windows and it's really made the process of managing
c++ dependencies far less painful. Great to see this coming cross-platform as
we can now simplify the dependency section of our install guide to one line.

vcpkg install boost cgal [etc...]

Their team has also been super friendly and responsive on Github. Looking
forward to seeing where this goes.

------
0xFFC
Thank you Microsoft. This is awesome

------
skolemtotem
I guess this is the part where they _Embrace_ the overwhelming trend towards
cross-platform tooling.

~~~
sli
I see the Windows Subsystem for Linux as the Embrace step, making this the
Extend step.

~~~
pjmlp
Google is much further ahead than Microsoft on the Extend step regarding
Linux.

ChromeOS, Android, Android Things.

------
dvfjsdhgfv
> At Microsoft, the core of our vision is “Any Developer, Any App, Any
> Platform”

This is what you want us to believe. But this makes little sense: if you
really believed in "any platform", this would go against your the interest of
the company (Windows sales), and therefore also against the interest of
shareholders. I liked you more when you didn't pretend.

~~~
Analemma_
> this would go against your the interest of the company (Windows sales)

This would've been an insightful comment in 2007, but the world has changed.
Microsoft makes its money on Azure now, and that means supporting developers
everywhere.

For crying out loud, post-reorg Windows doesn't even have someone reporting
directly to the CEO anymore.

~~~
Nullabillity
If that was true then WPF and WinForms would have been part of .NET Core.

If that was true then Microsoft wouldn't be pushing DirectX 12.

~~~
Const-me
> WPF and WinForms would have been part of .NET Core

I’d love them to be, but unfortunately there’re technical reasons for that.
Both depend on too many Windows components. WinForms is really a thin wrapper
around Win32 windows and GDI+. WPF relies heavily on DirectX 9.

For mobile platforms, Microsoft offers Xamarin for GUI.

> Microsoft wouldn't be pushing DirectX 12.

Again, there’re technical reasons. For the same reasons Apple is pushing
Metal, and Khronos is pushing Vulkan, all 3 are conceptually quite similar.

~~~
Nullabillity
> I’d love them to be, but unfortunately there’re technical reasons for that.
> Both depend on too many Windows components. WinForms is really a thin
> wrapper around Win32 windows and GDI+. WPF relies heavily on DirectX 9.

And yet somehow Mono is able to (mostly) emulate WinForms, while Wine can
(mostly) emulate D3D9. And MS can't (at least) throw their weight behind that,
rather than wasting time on WSL?

> Again, there’re technical reasons. For the same reasons Apple is pushing
> Metal, and Khronos is pushing Vulkan, all 3 are conceptually quite similar.

So why aren't Microsoft (and Apple) pushing Vulkan as well, rather than their
own "quite similar" APIs?

~~~
Const-me
> MS can't (at least) throw their weight behind that, rather than wasting time
> on WSL?

I don’t know the answer to that, I’m unrelated to MS, not even on the same
continent. But I have an idea why. Because outside Android, Linux GPU stack is
a mess. Maybe Vulkan will fix it, but it’s not happened yet. I’m just not sure
it’s possible to build a good product on top of that.

But they sure can build a single cross-platform GUI library for Windows, OSX,
and mobile platforms. And I hope they will.

> why aren't Microsoft (and Apple) pushing Vulkan as well, rather than their
> own "quite similar" APIs?

Apple released Metal in 2014. MS released DX12 in 2015. Vulkan was first
announced in 2015, and they released 1.0 version of the spec only in 2016.
That’s why.

------
friendlyghost
Yet another package manager for Linux/MacOs to put yet more duplicates of
already packaged software on our disks. As a solution for Windows, vcpkg fills
a gap (I use it myself). For other platforms, this just adds more waste.

And the first thing it does on Ubuntu 16.04 is to force me to install g++-7
from the toolchain ppa. So now presumably I have to link everything statically
(ever tried that with gtk?) or the users of my software will have to install
g++-7 too?

~~~
pjmlp
"For other platforms" is not a synonym for Linux, there are plenty of other
OSes out there, the majority of which still don't use package managers.

