You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There are a few advantages to using vcpkg:
- There are a large number of packages available. This should mean that
it's easier to add packages in the future. It also means that some
existing dependencies that have been manually added (e.g. CLI11,
Detours) can be used via vcpkg instead.
- Packages (particularly popular ones, such as Boost) should be updated
more frequently.
- Although NuGet can be used to manage C++ packages, it's mainly
targeted at .NET libraries. NuGet is designed to allow prebuilt
binaries to be distributed, however, that can cause issues with C++
projects, as it's not feasible to provide prebuilt binaries for all
combinations of compilation options (as noted in
https://vcpkg.io/en/docs/about/faq.html#why-not-nuget).
For example, the Boost NuGet packages that were being used (from
https://github.com/sergey-shandar/getboost) were pre-built for
x86/x64. That then meant that attempting to support ARM64 wasn't
possible.
- For dependencies that are included manually (e.g. manually included
source files), using vcpkg has the advantage that the dependencies
will be built once, even when rebuilding the solution.
These advantages come at the cost of a slightly more complicated build
process (the vcpkg submodule needs to be checked out and the instance
initialized) and longer initial build times. However, these are
considered to be worthwhile trade-offs.
Note that vcpkg has been added as a submodule. This has been done for a
few reasons:
- It means that the version of vcpkg is consistent, rather than whatever
version the user happens to have installed globally. That's important,
as the user might have an old version of vcpkg checked out, which
doesn't have the appropriate package versions.
- As noted in
https://vcpkg.io/en/docs/about/faq.html#how-do-i-use-different-versions-of-a-library-on-one-machine,
you can only have one version of a library installed within a single
instance of vcpkg. As users could have arbitrary packages and versions
installed globally, it makes much more sense to have a
project-specific vcpkg instance. That then avoids any conflicts with
other projects.
Note that explicit package versions aren't specified in vcpkg.json;
instead, the baseline is used. This is the standard way of interacting
with vcpkg. Package versions are effectively tied to the baseline. When
the baseline is updated, the necessary packages will also be updated,
with vcpkg verifying that versions within a baseline don't conflict.
To compile the application, the following steps are now required first:
git clone --recurse-submodules https://github.com/derceg/explorerplusplus.git
cd explorerplusplus
.\Explorer++\ThirdParty\vcpkg\bootstrap-vcpkg.bat
The necessary packages will then be installed when starting the build.
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
0 commit comments