| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- cmake-developer(7)
- ******************
- .. only:: html or latex
- .. contents::
- Introduction
- ============
- This manual is intended for reference by developers modifying the CMake
- source tree itself.
- Help
- ====
- Modules
- =======
- Note to authors of FindXxx.cmake files
- We would like all FindXxx.cmake files to produce consistent variable
- names.
- Please use the following consistent variable names for general use.
- Xxx_INCLUDE_DIRS
- The final set of include directories listed in one variable for use by client
- code. This should not be a cache entry.
- Xxx_LIBRARIES
- The libraries to link against to use Xxx. These should include full paths.
- This should not be a cache entry.
- Xxx_DEFINITIONS
- Definitions to use when compiling code that uses Xxx. This really shouldn't
- include options such as (-DHAS_JPEG)that a client source-code file uses to
- decide whether to #include <jpeg.h>
- Xxx_EXECUTABLE
- Where to find the Xxx tool.
- Xxx_Yyy_EXECUTABLE
- Where to find the Yyy tool that comes with Xxx.
- Xxx_LIBRARY_DIRS
- Optionally, the final set of library directories listed in one variable for
- use by client code. This should not be a cache entry.
- Xxx_ROOT_DIR
- Where to find the base directory of Xxx.
- Xxx_VERSION_Yy
- Expect Version Yy if true. Make sure at most one of these is ever true.
- Xxx_WRAP_Yy
- If False, do not try to use the relevant CMake wrapping command.
- Xxx_Yy_FOUND
- If False, optional Yy part of Xxx sytem is not available.
- Xxx_FOUND
- Set to false, or undefined, if we haven't found, or don't want to use Xxx.
- Xxx_NOT_FOUND_MESSAGE
- Should be set by config-files in the case that it has set Xxx_FOUND to FALSE.
- The contained message will be printed by the find_package() command and by
- find_package_handle_standard_args() to inform the user about the problem.
- Xxx_RUNTIME_LIBRARY_DIRS
- Optionally, the runtime library search path for use when running an
- executable linked to shared libraries. The list should be used by user code
- to create the PATH on windows or LD_LIBRARY_PATH on unix. This should not be
- a cache entry.
- Xxx_VERSION_STRING
- A human-readable string containing the version of the package found, if any.
- Xxx_VERSION_MAJOR
- The major version of the package found, if any.
- Xxx_VERSION_MINOR
- The minor version of the package found, if any.
- Xxx_VERSION_PATCH
- The patch version of the package found, if any.
- You do not have to provide all of the above variables. You should provide
- Xxx_FOUND under most circumstances. If Xxx is a library, then Xxx_LIBRARIES,
- should also be defined, and Xxx_INCLUDE_DIRS should usually be defined (I
- guess libm.a might be an exception)
- The following names should not usually be used in CMakeLists.txt files, but
- they may be usefully modified in users' CMake Caches to control stuff.
- Xxx_LIBRARY
- Name of Xxx Library. A User may set this and Xxx_INCLUDE_DIR to ignore to
- force non-use of Xxx.
- Xxx_Yy_LIBRARY
- Name of Yy library that is part of the Xxx system. It may or may not be
- required to use Xxx.
- Xxx_INCLUDE_DIR
- Where to find xxx.h, etc. (Xxx_INCLUDE_PATH was considered bad because a path
- includes an actual filename.)
- Xxx_Yy_INCLUDE_DIR
- Where to find xxx_yy.h, etc.
- For tidiness's sake, try to keep as many options as possible out of the cache,
- leaving at least one option which can be used to disable use of the module, or
- locate a not-found library (e.g. Xxx_ROOT_DIR). For the same reason, mark
- most cache options as advanced.
- If you need other commands to do special things then it should still begin
- with ``Xxx_``. This gives a sort of namespace effect and keeps things tidy for the
- user. You should put comments describing all the exported settings, plus
- descriptions of any the users can use to control stuff.
- You really should also provide backwards compatibility any old settings that
- were actually in use. Make sure you comment them as deprecated, so that
- no-one starts using them.
- To add a module to the CMake documentation, follow these steps:
- 1. Add file ``Help/module/FindXxx.rst`` containing just the line::
- .. cmake-module:: ../../Modules/FindXxx.cmake
- 2. Modify ``Help/manual/cmake-modules.7.rst`` to reference the module in the
- toctree directive as::
- /module/FindXxx
- Keep the toctree in sorted order!
- 3. Add to the top of ``Modules/FindXxx.cmake`` a #-comment of the form::
- #.rst:
- # FindXxx
- # -------
- #
- # ...reStructuredText documentation of module...
- Comment blocks starting with the line ``#.rst:`` may appear anywhere
- in the file.
- For example::
- #.rst:
- # FindXxx
- # -------
- #
- # This is a cool module.
- # This module does really cool stuff.
- # It can do even more than you think.
- #
- # It even needs two paragraphs to tell you about it.
- # And it defines the following variables:
- #
- # * VAR_COOL: this is great isn't it?
- # * VAR_REALLY_COOL: cool right?
- Test the documentation formatting by running cmake --help-module FindXxx,
- and ideally by enabling the SPHINX_HTML and SPHINX_MAN options to
- build the documentation. Edit the comments until generated documentation
- looks satisfactory. To have a .cmake file in this directory NOT show up in
- the modules documentation, simply leave out the ``Help/module/<module>.rst``
- file and the ``Help/manual/cmake-modules.7.rst`` toctree entry.
- After the documentation, leave a *BLANK* line, and then add a
- copyright and licence notice block like this one::
- #=============================================================================
- # Copyright 2009-2011 Your Name
- #
- # Distributed under the OSI-approved BSD License (the "License");
- # see accompanying file Copyright.txt for details.
- #
- # This software is distributed WITHOUT ANY WARRANTY; without even the
- # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- # See the License for more information.
- #=============================================================================
- # (To distribute this file outside of CMake, substitute the full
- # License text for the above reference.)
- The layout of the notice block is strictly enforced by the ``ModuleNotices``
- test. Only the year range and name may be changed freely.
- A FindXxx.cmake module will typically be loaded by the command::
- FIND_PACKAGE(Xxx [major[.minor[.patch[.tweak]]]] [EXACT]
- [QUIET] [[REQUIRED|COMPONENTS] [components...]])
- If any version numbers are given to the command it will set the following
- variables before loading the module:
- Xxx_FIND_VERSION
- full requested version string
- Xxx_FIND_VERSION_MAJOR
- major version if requested, else 0
- Xxx_FIND_VERSION_MINOR
- minor version if requested, else 0
- Xxx_FIND_VERSION_PATCH
- patch version if requested, else 0
- Xxx_FIND_VERSION_TWEAK
- tweak version if requested, else 0
- Xxx_FIND_VERSION_COUNT
- number of version components, 0 to 4
- Xxx_FIND_VERSION_EXACT
- true if EXACT option was given
- If the find module supports versioning it should locate a version of
- the package that is compatible with the version requested. If a
- compatible version of the package cannot be found the module should
- not report success. The version of the package found should be stored
- in "Xxx_VERSION..." version variables documented by the module.
- If the QUIET option is given to the command it will set the variable
- Xxx_FIND_QUIETLY to true before loading the FindXxx.cmake module. If
- this variable is set the module should not complain about not being
- able to find the package. If the
- REQUIRED option is given to the command it will set the variable
- Xxx_FIND_REQUIRED to true before loading the FindXxx.cmake module. If
- this variable is set the module should issue a FATAL_ERROR if the
- package cannot be found.
- If neither the QUIET nor REQUIRED options are given then the
- FindXxx.cmake module should look for the package and complain without
- error if the module is not found.
- FIND_PACKAGE() will set the variable CMAKE_FIND_PACKAGE_NAME to
- contain the actual name of the package.
- A package can provide sub-components.
- Those components can be listed after the COMPONENTS (or REQUIRED) or
- OPTIONAL_COMPONENTS keywords. The set of all listed components will be
- specified in a Xxx_FIND_COMPONENTS variable.
- For each package-specific component, say Yyy, a variable Xxx_FIND_REQUIRED_Yyy
- will be set to true if it listed after COMPONENTS and it will be set to false
- if it was listed after OPTIONAL_COMPONENTS.
- Using those variables a FindXxx.cmake module and also a XxxConfig.cmake
- package configuration file can determine whether and which components have
- been requested, and whether they were requested as required or as optional.
- For each of the requested components a Xxx_Yyy_FOUND variable should be set
- accordingly.
- The per-package Xxx_FOUND variable should be only set to true if all requested
- required components have been found. A missing optional component should not
- keep the Xxx_FOUND variable from being set to true.
- If the package provides Xxx_INCLUDE_DIRS and Xxx_LIBRARIES variables, the
- include dirs and libraries for all components which were requested and which
- have been found should be added to those two variables.
- To get this behaviour you can use the FIND_PACKAGE_HANDLE_STANDARD_ARGS()
- macro, as an example see FindJPEG.cmake.
- For internal implementation, it's a generally accepted convention that
- variables starting with underscore are for temporary use only. (variable
- starting with an underscore are not intended as a reserved prefix).
|