Spec-Zone.ru › CMake 3.29

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

Spec-Zone.ru

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