anchor.diff:  [[sec:cpp_dependency_management_overview]]
   == Managing your dependencies
   
  -The vast majority of C++ projects rely on libraries, so managing a project’s dependencies is an important part of building a C++ project.
  -Dependency management is a big topic, so we will focus on the basics for C++ projects here.
  +The vast majority of projects rely on other projects, so managing your project's dependencies is an important part of building any project.
  +Dependency management is a big topic, so we will only focus on the basics for C++ projects here.
   If you’d like to dive into the details, check out the <<introduction_dependency_management.adoc#introduction_dependency_management,introduction to dependency management>>.
   
  -Unlike the Java world, C++ project often built from source.
  -However, Gradle provide support for consuming pre-built binaries from Maven repositories footnote:[Unfortunately, Conan and Nuget repositories aren’t yet support as core features] published by Gradle.
  -We will cover how to add dependencies on projects within a multi-build project.
  -
  -Specifying the dependencies for your C++ project requires just two pieces of information:
  -
  - * Which dependency you need as the project path
  - * What it’s needed for, e.g. compilation, linking, or both
  -
  -The information are specified in a `dependencies {}` block of the C++ `application` or `library` script block.
  -For example, to tell Gradle that your project requires library `Foo` to compile and link your production code, you can use the following fragment:
  +Gradle provides support for consuming pre-built binaries from Maven repositories published by Gradle footnote:[Unfortunately, Conan and Nuget repositories aren’t yet support as core features]. 
  +
  +We will cover how to add dependencies between projects within a multi-build project.
  +
  +Specifying dependencies for your C++ project requires two pieces of information:
  +
  + * Identifying information for the dependency (project path, Maven GAV)
  + * What it’s needed for, e.g. compilation, linking, runtime or all of the above.
  +
  +This information is specified in a `dependencies {}` block of the C++ `application` or `library` script block.
  +For example, to tell Gradle that your project requires library `common` to compile and link your production code, you can use the following fragment:
   
   .Declaring dependencies
   ====
  
positive.code: In the future, Gradle will consider source and ABI compatibility when selecting a tool chain.
  
  Gradle has general support for the three major tool chains on major operating system: Clang footnote:[Installed with Xcode on macOS], GCC footnote:[Installed through Cygwin and MinGW for 32- and 64-bits architecture on Windows] and Visual C++ footnote:[Installed with Visual Studio 2010 to 2017] (Windows-only).
  GCC and Clang installed using Macports and Homebrew have been reported to work fine but isn’t tested continuously.
  
  // TODO: Check to see if we use any headers
  ==== Windows
  
negative.code: 
  As far as configurations go, the main ones of interest are:
  
   * `implementation` - used for compilation, linking and runtime
   * `cppCompile__Variant__` - for dependencies that are necessary to compile your production code but shouldn’t be part of the linking or runtime process
   * `nativeLink__Variant__` - for dependencies that are necessary to link your code but shouldn’t be part of the compilation or runtime process
   * `nativeRuntime__Variant__` - for dependencies that are necessary to run your component but shouldn’t be part of the compilation or linking process
  
  