From Fedora Project Wiki

No edit summary
No edit summary
Line 7: Line 7:
=== BuildRequires and Requires ===
=== BuildRequires and Requires ===


If your application is a C or C++ application you must list a `BuildRequires` against `gcc`, `gcc-c++` or `clang`. Those packages will include everything that is required to build a standards conforming C or C++ application.
If your application is a C or C++ application you must list a <code>BuildRequires</code> against <code>gcc</code>, <code>gcc-c++</code> or <code>clang</code>. Those packages will include everything that is required to build a standards conforming C or C++ application.


If your library includes standard C or C++ headers, you must list `Requires` against `gcc`, `gcc-c++`, or `clang` to install the needed standards conforming headers.
If your library includes standard C or C++ headers, you must list <code>Requires</code> against <code>gcc</code>, <code>gcc-c++</code>, or <code>clang</code> to install the needed standards conforming headers.


If at runtime you use `cpp` to process C or C++ langauge headers then you have no choice but to use `Requires` for `gcc`, `gcc-c++`, or `clang` to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. `c-headers` or `c++-headers`.
If at runtime you use <code>cpp</code> to process C or C++ langauge headers then you have no choice but to use <code>Requires</code> for <code>gcc</code>, <code>gcc-c++</code>, or <code>clang</code> to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. <code>c-headers</code> or <code>c++-headers</code>.


You need not include a `BuildRequires` or `Requires` on `glibc-headers`, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the `*-static` library packages. The default use case of a dynamically compiled C or C++ application is taken care of by the gcc, gcc-c++, and clang packages.
You need not include a <code>BuildRequires</code> or <code>Requires</code> on <code>glibc-headers</code>, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the <code>.*-static</code> library packages. The default use case of a dynamically compiled C or C++ application is taken care of by the <code>gcc</code>, <code>gcc-c++</code>, and <code>clang</code> packages.


[[Category:Packaging guidelines]]
[[Category:Packaging guidelines]]

Revision as of 21:28, 12 June 2015

This page contains best practices for C and C++ applications in Fedora, from development, debugging, and maintenance to packaging.

Packaging C and C++ applications

There are two basic categories of C and C++ packages: applications and libraries. Some of these guidelines will also apply to packages that use cpp to process C or C++ headers.

BuildRequires and Requires

If your application is a C or C++ application you must list a BuildRequires against gcc, gcc-c++ or clang. Those packages will include everything that is required to build a standards conforming C or C++ application.

If your library includes standard C or C++ headers, you must list Requires against gcc, gcc-c++, or clang to install the needed standards conforming headers.

If at runtime you use cpp to process C or C++ langauge headers then you have no choice but to use Requires for gcc, gcc-c++, or clang to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. c-headers or c++-headers.

You need not include a BuildRequires or Requires on glibc-headers, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the .*-static library packages. The default use case of a dynamically compiled C or C++ application is taken care of by the gcc, gcc-c++, and clang packages.