add_subdirectory.rst 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. add_subdirectory
  2. ----------------
  3. Add a subdirectory to the build.
  4. .. code-block:: cmake
  5. add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM])
  6. Adds a subdirectory to the build. The source_dir specifies the
  7. directory in which the source CMakeLists.txt and code files are
  8. located. If it is a relative path it will be evaluated with respect
  9. to the current directory (the typical usage), but it may also be an
  10. absolute path. The ``binary_dir`` specifies the directory in which to
  11. place the output files. If it is a relative path it will be evaluated
  12. with respect to the current output directory, but it may also be an
  13. absolute path. If ``binary_dir`` is not specified, the value of
  14. ``source_dir``, before expanding any relative path, will be used (the
  15. typical usage). The CMakeLists.txt file in the specified source
  16. directory will be processed immediately by CMake before processing in
  17. the current input file continues beyond this command.
  18. If the ``EXCLUDE_FROM_ALL`` argument is provided then targets in the
  19. subdirectory will not be included in the ``ALL`` target of the parent
  20. directory by default, and will be excluded from IDE project files.
  21. Users must explicitly build targets in the subdirectory. This is
  22. meant for use when the subdirectory contains a separate part of the
  23. project that is useful but not necessary, such as a set of examples.
  24. Typically the subdirectory should contain its own :command:`project`
  25. command invocation so that a full build system will be generated in the
  26. subdirectory (such as a VS IDE solution file). Note that inter-target
  27. dependencies supersede this exclusion. If a target built by the
  28. parent project depends on a target in the subdirectory, the dependee
  29. target will be included in the parent project build system to satisfy
  30. the dependency.
  31. If the ``SYSTEM`` argument is provided, the :prop_dir:`SYSTEM` directory
  32. property of the subdirectory will be set to true. This property is
  33. used to initialize the :prop_tgt:`SYSTEM` property of each non-imported
  34. target created in that subdirectory. The include directories of targets
  35. with :prop_tgt:`SYSTEM` set to true will be treated as ``SYSTEM`` when
  36. compiling consumers.