anchor.diff:  = Building C++ projects
   
   Gradle uses a convention-over-configuration approach to building native projects.
  -If you are coming from another native build system, those concepts may be overwhelming at first but serve the purpose to simplify the whole build script authoring.
  -It borrows several conventions from Apache Maven.
  -In particular, it uses the same default directory pattern for source files and headers.
  -
  -We will look at C\++ projects in detail in this chapter, but most of the topics apply to other supported native languages as well.
  -If you don’t have much experience with building native projects with Gradle, take a look at the C++ tutorials for step-by-step instructions on how to build various types of basic C++ projects as well as some common use case.
  -
  -The C++ plugins covered in this chapter were https://blog.gradle.org/introducing-the-new-cpp-plugins[introduced in 2018] and we recommend users to use those plugins over <<native_software.adoc#native_binaries,the older Native plugins>>.
  +If you are coming from another native build system, these concepts may be unfamiliar at first, but they serve a purpose to simplify build script authoring.
  +
  +We will look at C\++ projects in detail in this chapter, but most of the topics will apply to other supported native languages as well.
  +If you don’t have much experience with building native projects with Gradle, take a look at the C++ tutorials for step-by-step instructions on how to build various types of basic C++ projects as well as some common use cases.
  +
  +The C++ plugins covered in this chapter were https://blog.gradle.org/introducing-the-new-cpp-plugins[introduced in 2018] and we recommend users to use those plugins over <<native_software.adoc#native_binaries,the older Native plugins>> that you may find references to.
   
   == Introduction
   
  
positive.code: Be aware that the C++ Library Plugin creates an additional configuration - `api` - for dependencies that are required for compiling and linking both the module and any modules that depend on it.
  
  We have only scratched the surface here, so we recommend that you read the dedicated dependency management chapters once you’re comfortable with the basics of building C++ projects with Gradle.
  Some common scenarios that require further reading include:
  
   * Defining a custom <<repository_types.adoc#maven_repo,Maven-compatible>> repository
  
negative.code: == Packaging and publishing
  
  How you package and potentially publish your C++ project varies greatly in the native world.
  Gradle comes with defaults, but custom packaging can be implemented without any issues.
  
   * Executable files are published directly to Maven repositories.
   * Shared and static library files are published directly to Maven repositories along with a zip of the public headers.
   * For applications, Gradle also supports installing and running the executable with all of its shared library dependencies in a known location.
  
  [[sec:cleaning_cpp_build]]
  == Cleaning the build
  
  The C++ Application and Library Plugins add a `clean` task to you project by using the <<base_plugin,base plugin>>.
  This task simply deletes everything in the `$buildDir` directory, hence why you should always put files generated by the build in there.
  The task is an instance of Delete and you can change what directory it deletes by setting its `dir` property.
  
  