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_minimum_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–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/return.html