Back to Cmake

PROJECT_IS_TOP_LEVEL

Help/variable/PROJECT_IS_TOP_LEVEL.rst

4.3.21.3 KB
Original Source

PROJECT_IS_TOP_LEVEL

.. versionadded:: 3.21

A boolean variable indicating whether the most recently called :command:project command in the current scope or above was in the top level CMakeLists.txt file.

Some modules should only be included as part of the top level CMakeLists.txt file to not cause unintended side effects in the build tree, and this variable can be used to conditionally execute such code. For example, consider the :module:CTest module, which creates targets and options:

.. code-block:: cmake

project(MyProject) ... if(PROJECT_IS_TOP_LEVEL) include(CTest) endif()

The variable value will be true in:

  • the top-level directory of the project
  • the top-level directory of an external project added by :module:ExternalProject
  • a directory added by :command:add_subdirectory that does not also contain a :command:project call
  • a directory added by :command:FetchContent_MakeAvailable, if the fetched content does not contain a :command:project call

The variable value will be false in:

  • a directory added by :command:add_subdirectory that also contains a :command:project call
  • a directory added by :command:FetchContent_MakeAvailable, if the fetched content contains a :command:project call