在当前范围和PARENT_SCOPE中设置变量?

时间:2015-12-01 19:16:23

标签: cmake

如果我这样做:

set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
message("SourceDir: " ${SourceDir})

消息显示SourceDir为空。据推测,它仅在父范围内设置。有没有办法在当前范围和父范围中设置变量?所以我不必这样做:

set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE)
set(SourceDir ${CMAKE_CURRENT_SOURCE_DIR})
message("SourceDir: " ${SourceDir})

2 个答案:

答案 0 :(得分:4)

当您为PARENT_SCOPE设置它时,它不会以某种方式为当前范围执行此操作。但是两步过程是有效的。第一行在本地设置,第二行将其导出到父范围。

set (LIB_VER 6)
set (LIB_VER ${LIB_VER} PARENT_SCOPE)

答案 1 :(得分:1)

我想你不能。文档说:

  

每个新目录或函数都会创建一个新范围。

如果我在执行SET时正确理解它,则已通过复制父范围创建其范围。所以无论你对原作(PARENT_SCOPE)做什么,你的本地范围都不会改变。

您最好在CMake's user list上询问问题,以确认在本地范围内未定义变量时,它们不会回退到父级。但如果他们这样做,这就是一个错误。