diff --git a/integrations.rst b/integrations.rst index 0473d91ac7de..f284ffe843e1 100644 --- a/integrations.rst +++ b/integrations.rst @@ -7,7 +7,7 @@ Integrations Conan provides seamless integration with several platforms, build systems, and IDEs. Conan brings off-the-shelf support for some of the most important operating systems, including Windows, Linux, macOS, Android, and iOS. Some of the most important build systems -supported by Conan include CMake, MSBuild, Meson and Autotools. In addition to build +supported by Conan include CMake, MSBuild, Meson, Autotools and Make. In addition to build systems, Conan also provides integration with popular IDEs, such as Visual Studio and Xcode. @@ -17,6 +17,7 @@ Xcode. integrations/cmake integrations/visual_studio integrations/autotools + integrations/makefile integrations/xcode integrations/meson integrations/android @@ -28,4 +29,3 @@ Xcode. recommended to use them right now because they're not updated for the 2.0 version yet. However, we intend to resume working on these plugins and enhance their functionality once Conan 2.0 is released. - diff --git a/integrations/makefile.rst b/integrations/makefile.rst new file mode 100644 index 000000000000..efc7c92aa8fb --- /dev/null +++ b/integrations/makefile.rst @@ -0,0 +1,22 @@ +.. _integrations_makefile: + +|gnu_make_logo| Makefile +======================== + +Conan provides different tools to help manage your projects using Make. They can be +imported from ``conan.tools.gnu``. Besides the most popular variant, GNU Make, Conan also +supports other variants like BSD Make. The most relevant tools are: + +- `MakeDeps`: the dependencies generator for Make, which generates a Makefile containing + definitions that the Make build tool can understand. + +Currently, there is no ``MakeToolchain`` generator, it should be added in the future. + +For the full list of tools under ``conan.tools.gnu`` please check the :ref:`reference +` section. + +.. seealso:: + + - Reference for :ref:`MakeDeps`. + +.. |gnu_make_logo| image:: ../images/integrations/conan-autotools-logo.png diff --git a/reference/tools/gnu.rst b/reference/tools/gnu.rst index 0f6f561a9732..48e2e93734bc 100644 --- a/reference/tools/gnu.rst +++ b/reference/tools/gnu.rst @@ -9,5 +9,6 @@ conan.tools.gnu gnu/autotoolsdeps gnu/autotoolstoolchain gnu/autotools + gnu/makedeps gnu/pkgconfigdeps gnu/pkgconfig diff --git a/reference/tools/gnu/makedeps.rst b/reference/tools/gnu/makedeps.rst new file mode 100644 index 000000000000..0b21f88136bd --- /dev/null +++ b/reference/tools/gnu/makedeps.rst @@ -0,0 +1,93 @@ +.. _conan_tools_gnu_makedeps: + +MakeDeps +======== + +.. include:: ../../../common/experimental_warning.inc + +.. _MakeDeps: + +``MakeDeps`` is the dependencies generator for make. It generates a Makefile file named ``conandeps.mk`` +containing a valid make file syntax with all dependencies listed, including their components. + +This generator can be used by name in conanfiles: + +.. code-block:: python + :caption: conanfile.py + + class Pkg(ConanFile): + generators = "MakeDeps" + +.. code-block:: text + :caption: conanfile.txt + + [generators] + MakeDeps + +And it can also be fully instantiated in the conanfile ``generate()`` method: + +.. code:: python + + from conan import ConanFile + from conan.tools.gnu import MakeDeps + + class App(ConanFile): + settings = "os", "arch", "compiler", "build_type" + requires = "zlib/1.2.13" + + def generate(self): + pc = MakeDeps(self) + pc.generate() + + +Generated files +--------------- + +`make` format file named ``conandeps.mk``, containing a valid makefile file syntax. +The ``prefix`` variable is automatically adjusted to the ``package_folder``: + +.. code-block:: makefile + + CONAN_DEPS = zlib + + # zlib/1.2.13 + CONAN_NAME_ZLIB = zlib + CONAN_VERSION_ZLIB = 1.2.13 + CONAN_REFERENCE_ZLIB = zlib/1.2.13 + CONAN_ROOT_ZLIB = /home/conan/.conan2/p/b/zlib273508b343e8c/p + CONAN_INCLUDE_DIRS_ZLIB = $(CONAN_INCLUDE_DIR_FLAG)$(CONAN_ROOT_ZLIB)/include + CONAN_LIB_DIRS_ZLIB = $(CONAN_LIB_DIR_FLAG)$(CONAN_ROOT_ZLIB)/lib + CONAN_BIN_DIRS_ZLIB = $(CONAN_BIN_DIR_FLAG)$(CONAN_ROOT_ZLIB)/bin + CONAN_LIBS_ZLIB = $(CONAN_LIB_FLAG)z + + CONAN_INCLUDE_DIRS = $(CONAN_INCLUDE_DIRS_ZLIB) + CONAN_LIB_DIRS = $(CONAN_LIB_DIRS_ZLIB) + CONAN_BIN_DIRS = $(CONAN_BIN_DIRS_ZLIB) + CONAN_LIBS = $(CONAN_LIBS_ZLIB) + +Customization +------------- + +Flags ++++++ + +By default, the ``conandeps.mk`` will contain all dependencies listed, including their ``cpp_info`` information, but will not pass any flags to the compiler. + +Thus, the consumer should pass the following flags to the compiler: + +- **CONAN_LIB_FLAG**: Add a prefix to all libs variables, e.g. ``-l`` +- **CONAN_DEFINE_FLAG**: Add a prefix to all defines variables, e.g. ``-D`` +- **CONAN_SYSTEM_LIB_FLAG**: Add a prefix to all system_libs variables, e.g. ``-l`` +- **CONAN_INCLUDE_DIR_FLAG**: Add a prefix to all include dirs variables, e.g. ``-I`` +- **CONAN_LIB_DIR_FLAG**: Add a prefix to all lib dirs variables, e.g. ``-L`` +- **CONAN_BIN_DIR_FLAG**: Add a prefix to all bin dirs variables, e.g. ``-L`` + +Those flags should be appended as prefixes to flags variables. For example, if the ``CONAN_LIB_FLAG`` is set to ``-l``, the ``CONAN_LIBS`` variable will be set to ``-lz``. + +Reference +--------- + +.. currentmodule:: conan.tools.gnu + +.. autoclass:: MakeDeps + :members: