作用域

函数作用域 function scope

即在函数内部定义和使用的变量, 只在当前函数及函数内部调用的子函数可见. 变量查找优先级最高. 函数作用域中会有一份复制的函数所在目录的目录作用域变量.

目录作用域 directory scope

即在目录的 CMakeLists.txt 中定义的变量, 在当前的目录作用域, 里面的函数, 及子目录作用域可见. 在子目录作中域中会有一份复制的父目录作用域变量. 变量查找优先级较高.

set() 修改上一级作用域中的变量

set() 命令默认只修改当前作用域变量, 可以传入 PARENT_SCOPE 参数, 让它修改父作用域中的变量:

set(WIDGETS_FILES 
  file1,
  file2,
  file3,
  PARENT_SCOPE)