【发布时间】:2021-12-22 23:53:24
【问题描述】:
我在 cmake 中创建了一个带有子项目的项目。在子项目中,我有一个函数想要从其定义范围(而不是父项目范围)访问变量。
这是我的文件夹结构:
/project
|-- CMakeLists.txt
'-- /sub
'-- CMakeLists.txt
外部 CMakeLists.txt:
project(mainproject)
cmake_minimum_required(VERSION 3.17)
add_subdirectory(sub)
message("in parent scope: ${V}")
test()
内部 CMakeLists.txt:
project(subproject)
cmake_minimum_required(VERSION 3.17)
set(V "hello")
message("defining scope: ${V}")
function(test)
message("function scope: ${V}")
endfunction()
我得到的输出:
defining scope: hello
parent scope:
function scope:
-- Configuring done
-- Generating done
我的怀疑是 cmake 根本不支持闭包,但是文档中有这个页面: CMAKE_CURRENT_FUNCTION_LIST_DIR
set(_THIS_MODULE_BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
function(foo)
configure_file(
"${_THIS_MODULE_BASE_DIR}/some.template.in"
some.output
)
endfunction()
这几乎完全是我的用例,也是我所做的,但它不起作用。
我在这里错过了什么?
请注意,我可以使用set(V "hello" PARENT_SCOPE),但我不想污染父作用域。
任何帮助表示赞赏!
【问题讨论】: