Spec-Zone.ru › CMake

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.txt
cmake_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.txt
function(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()

См. также

  • block()
  • function()

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/return.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API