summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorSteven Stallion <sstallion@gmail.com>2023-05-14 19:20:27 (GMT)
committerCraig Scott <craig.scott@crascit.com>2023-09-25 22:56:44 (GMT)
commit5f77807f1cc5b73eea00c55fdacc261cb3b0d3bb (patch)
tree44fc9f877562c5094d8294edc58f2a8b3391c21c /Modules
parent4ac624debc11e3b87d53a34ccfe3e25ff9c5a426 (diff)
downloadCMake-5f77807f1cc5b73eea00c55fdacc261cb3b0d3bb.zip
CMake-5f77807f1cc5b73eea00c55fdacc261cb3b0d3bb.tar.gz
CMake-5f77807f1cc5b73eea00c55fdacc261cb3b0d3bb.tar.bz2
FetchContent: Add support for EXCLUDE_FROM_ALL
Fixes: #20167
Diffstat (limited to 'Modules')
-rw-r--r--Modules/FetchContent.cmake37
1 files changed, 30 insertions, 7 deletions
diff --git a/Modules/FetchContent.cmake b/Modules/FetchContent.cmake
index 4ff43ed..f10684c 100644
--- a/Modules/FetchContent.cmake
+++ b/Modules/FetchContent.cmake
@@ -111,6 +111,7 @@ Commands
FetchContent_Declare(
<name>
<contentOptions>...
+ [EXCLUDE_FROM_ALL]
[SYSTEM]
[OVERRIDE_FIND_PACKAGE |
FIND_PACKAGE_ARGS args...]
@@ -240,6 +241,15 @@ Commands
See the :prop_tgt:`SYSTEM` target property documentation for a more
detailed discussion of the effects.
+ .. versionadded:: 3.28
+
+ ``EXCLUDE_FROM_ALL``
+ If the ``EXCLUDE_FROM_ALL`` argument is provided, then targets in the
+ subdirectory added by :command:`FetchContent_MakeAvailable` will not be
+ included in the ``ALL`` target by default, and may be excluded from IDE
+ project files. See the `:command:`add_subdirectory` `EXCLUDE_FROM_ALL``
+ argument documentation for a more detailed discussion of the effects.
+
.. command:: FetchContent_MakeAvailable
.. versionadded:: 3.14
@@ -358,6 +368,11 @@ Commands
:command:`FetchContent_Declare`, the ``SYSTEM`` keyword will be
added to the :command:`add_subdirectory` command as well.
+ .. versionadded:: 3.28
+ If the ``EXCLUDE_FROM_ALL`` keyword was included in the call to
+ :command:`FetchContent_Declare`, the ``EXCLUDE_FROM_ALL`` keyword will
+ be added to the :command:`add_subdirectory` command as well.
+
Projects should aim to declare the details of all dependencies they might
use before they call ``FetchContent_MakeAvailable()`` for any of them.
This ensures that if any of the dependencies are also sub-dependencies of
@@ -1466,8 +1481,10 @@ function(__FetchContent_directPopulate contentName)
set(options
QUIET
- # SYSTEM has no meaning for ExternalProject, it is only used by us in
- # FetchContent_MakeAvailable(). We need to parse and discard it here.
+ # EXCLUDE_FROM_ALL and SYSTEM have no meaning for ExternalProject, they
+ # are only used by us in FetchContent_MakeAvailable(). We need to parse
+ # and discard them here.
+ EXCLUDE_FROM_ALL
SYSTEM
)
set(oneValueArgs
@@ -2030,22 +2047,28 @@ macro(FetchContent_MakeAvailable)
if("${__cmake_contentDetails}" STREQUAL "")
message(FATAL_ERROR "No details have been set for content: ${__cmake_contentName}")
endif()
- cmake_parse_arguments(__cmake_arg "SYSTEM" "SOURCE_SUBDIR" "" ${__cmake_contentDetails})
+ cmake_parse_arguments(__cmake_arg "EXCLUDE_FROM_ALL;SYSTEM" "SOURCE_SUBDIR" "" ${__cmake_contentDetails})
if(NOT "${__cmake_arg_SOURCE_SUBDIR}" STREQUAL "")
string(APPEND __cmake_srcdir "/${__cmake_arg_SOURCE_SUBDIR}")
endif()
if(EXISTS ${__cmake_srcdir}/CMakeLists.txt)
- if (__cmake_arg_SYSTEM)
- add_subdirectory(${__cmake_srcdir} ${${__cmake_contentNameLower}_BINARY_DIR} SYSTEM)
- else()
- add_subdirectory(${__cmake_srcdir} ${${__cmake_contentNameLower}_BINARY_DIR})
+ set(__cmake_add_subdirectory_args ${__cmake_srcdir} ${${__cmake_contentNameLower}_BINARY_DIR})
+ if(__cmake_arg_EXCLUDE_FROM_ALL)
+ list(APPEND __cmake_add_subdirectory_args EXCLUDE_FROM_ALL)
+ endif()
+ if(__cmake_arg_SYSTEM)
+ list(APPEND __cmake_add_subdirectory_args SYSTEM)
endif()
+ add_subdirectory(${__cmake_add_subdirectory_args})
endif()
unset(__cmake_srcdir)
unset(__cmake_contentDetails)
+ unset(__cmake_arg_EXCLUDE_FROM_ALL)
+ unset(__cmake_arg_SYSTEM)
unset(__cmake_arg_SOURCE_SUBDIR)
+ unset(__cmake_add_subdirectory_args)
endif()
endforeach()