return
Возврат из файла, каталога или функции.
return([PROPAGATE <var-name>...])
Когда эта команда встречается в включённом файле (через include() или find_package()), она останавливает обработку текущего файла и управление возвращается включающему файлу. Если она встречается в файле, не включённом другим файлом, например, в CMakeLists.txt, отложенные вызовы, запланированные с помощью cmake_language(DEFER), вызываются, и управление возвращается родительскому каталогу, если он есть.
Если return() вызывается в функции, управление возвращается вызывающей функции. Обратите внимание, что macro(), в отличие от function(), расширяется на месте и поэтому не может обрабатывать return().
Политика CMP0140 управляет поведением в отношении аргументов команды. Все аргументы игнорируются, если эта политика не установлена в NEW.
-
PROPAGATE -
Новое в версии 3.25.
Этот параметр устанавливает или сбрасывает указанные переменные в области видимости родительского каталога или вызывающей функции. Это эквивалентно командам
set(PARENT_SCOPE)илиunset(PARENT_SCOPE), за исключением способа взаимодействия с командойblock(), как описано ниже.Параметр
PROPAGATEможет быть очень полезным в сочетании с командойblock(). Заданиеreturnбудет распространять указанные переменные через любые окружающие области видимости блоков, созданные командамиblock(). Внутри функции это гарантирует, что переменные будут переданы вызывающей функции независимо от любых блоков внутри функции. Если функция не вызвана, это гарантирует, что переменные будут переданы в область видимости родительского файла или каталога. Например:CMakeLists.txtcmake_version_required(VERSION 3.25) project(example) set(var1 "top-value") block(SCOPE_FOR VARIABLES) add_subdirectory(subDir) # var1 has the value "block-nested" endblock() # var1 has the value "top-value"
subDir/CMakeLists.txtfunction(multi_scopes result_var1 result_var2) block(SCOPE_FOR VARIABLES) # This would only propagate out of the immediate block, not to # the caller of the function. #set(${result_var1} "new-value" PARENT_SCOPE) #unset(${result_var2} PARENT_SCOPE) # This propagates the variables through the enclosing block and # out to the caller of the function. set(${result_var1} "new-value") unset(${result_var2}) return(PROPAGATE ${result_var1} ${result_var2}) endblock() endfunction() set(var1 "some-value") set(var2 "another-value") multi_scopes(var1 var2) # Now var1 will hold "new-value" and var2 will be unset block(SCOPE_FOR VARIABLES) # This return() will set var1 in the directory scope that included us # via add_subdirectory(). The surrounding block() here does not limit # propagation to the current file, but the block() in the parent # directory scope does prevent propagation going any further. set(var1 "block-nested") return(PROPAGATE var1) endblock()
См. также
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.27/command/return.html